Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 29
  1. #1

    query mySQL che collega piu' campi

    ciao a tutti
    Io ho 4 campi di un form in una pagina destinata alla ricerca di materiale all'interno del db. Ipotizziamo che che i nomi siano "campo1","campo2","campo3","campo4","campo5".

    Come faccio in mySQL a collegare questi campi in modo che se l'utente inserisce solo i dati nel "campo1" mi viene cercato soltanto quello, se invece inserisce le chiavi di ricerca nei campi "campo1" e "campo5" mi cerchera' i dati di questi due (e soltanto di questi due) senza coinvolgere gli altri..

    Ho provato con una serie di if, ma il lavoro risulta troppo lungo. So' che c'e' un modo per poterlo fare, ma non so quale..

    Mi dareste una mano ?

    Grazie anticipatamente
    Nulla è impossibile. Il difficile è trovare la soluzione che renda l'impossibile possibile...
    http://www.eternaldream.it

  2. #2
    Utente di HTML.it L'avatar di gizax
    Registrato dal
    Jan 2004
    residenza
    Rome
    Messaggi
    386
    select * from TABELLA where nomecampo='$campo1' and nomecampo='$campo2' and ....


  3. #3
    altra alternativa che mi viene in mente è strutturare la query in questo modo:

    SELECT * FROM tabella WHERE campo1 LIKE '%$campo1%' AND campo2 LIKE '%$campo2%' AND campo3 LIKE '%$campo3%' AND campo4 LIKE '%$campo4%'

    in modo che se il campo è vuoto la query ti cerca qualsiasi [%] valore per quel campo e non influisce sulla tua query.
    naturalmente ti conviene fare un minimo di controllo sui dati in entrata, ad esempio così:
    $campo1 = trim($_POST['campo1']);

    questo è il minimo, che ti toglie eventuali spazi all'inizio e alla fine della stringa, evitando che vengano passate stringhe contenenti solo spazi.

    vedi le funzioni sul manuale [php.net].


    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  4. #4
    ciao gizax, ti ringrazio per la risposta pronta, ma la query che mi hai scritto non e' proprio quella che mi serve. Quella che hai scritto tu verifica se il campo e' vuoto e, se si, passa al secondo e cosi' via; ma se l'utente vuole fare una ricerca sia per "campo1" che per "campo4" (ricercando le chiavi di entrambi i campi) ci vorrebbe un AND al posto di OR. Capisci che come voglio fare io ci sarebbero una cosa come 25 (5*5) possibilita' diverse di mischiamento di campi.

    Se l'utente vuole essere generale inserisce soltanto yuna campo, ma se vuole che il risultato vada piu' nel detagliato, dovra' inserie anche altri dettagli negli altri campi che ristringono la ricerca a specifiche voci.

    Una cosa come:

    campo1=casa;
    campo2=garage;
    campo3=giardino;
    campo4=isolata;
    campo5=terrazzo;

    Se voglio cercare tutte le case in generale, nel campo1 scrivero' soltanto "case" cercandomi cosi' tutte le case con tutto.
    Ma se voglio cercare "tutte le case avente il giardino" completero' anche il campo3, e se volessi anche il terrazzo compilerei anche il campo5.

    Spero di essermi spiegato !!!
    Nulla è impossibile. Il difficile è trovare la soluzione che renda l'impossibile possibile...
    http://www.eternaldream.it

  5. #5
    Utente di HTML.it L'avatar di gizax
    Registrato dal
    Jan 2004
    residenza
    Rome
    Messaggi
    386
    ok corretto con AND adesso ti visualizza il risultato se almeno uno di quei campi viene trovato.

  6. #6
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Codice PHP:
    if ($_POST['campo1'] != "") {
     
    $where "campo1='".$_POST['campo1']."'";
    }
    if (
    $_POST['campo2'] != "") {
     
    $where .= ($where == "") ? "campo2='".$_POST['campo2']."'" " AND campo2='".$_POST['campo2']."'";
    }
    if (
    $_POST['campo3'] != "") {
     
    $where .= ($where == "") ? "campo3='".$_POST['campo3']."'" " AND campo3='".$_POST['campo3']."'";
    }
    mysql_query("SELECT * FROM tabella WHERE ".$where); 

  7. #7
    Originariamente inviato da alexdem24
    ...
    come avevo scritto io non andava bene? :master:
    Talvolta anche una persona apparentemente inutile si rivela un abile samurai dalla forza di mille uomini, dimostrando di poter rinunciare alla vita e che il suo cuore si è completamente identificato con quello del suo padrone

  8. #8
    Utente di HTML.it L'avatar di gizax
    Registrato dal
    Jan 2004
    residenza
    Rome
    Messaggi
    386
    non capisco...
    select * from TABELLA where nomecampo='$campo1' and nomecampo='$campo2' and nomecampo='$campo3' etc etc soddisfa pienamente i requisiti della richiesta. Viene visualizzato il risultato se almeno una di queste condizioni è vera..


  9. #9
    Utente di HTML.it L'avatar di VaLvOnAuTa
    Registrato dal
    Jun 2002
    Messaggi
    2,003
    Originariamente inviato da gizax
    non capisco...
    select * from TABELLA where nomecampo='$campo1' and nomecampo='$campo2' and nomecampo='$campo3' etc etc soddisfa pienamente i requisiti della richiesta. Viene visualizzato il risultato se almeno una di queste condizioni è vera..

    Da quello che ho capito la ricerca nn è nello stesso campo ma in più campi.
    E comunque la tua query verrebbe soddisfatta se e solo se
    $campo1="pizza"
    $campo2=""
    $campo3=""

    CONTEMPORANEAMENTE nomecampo valga "pizza" e sia nullo.

  10. #10
    Utente di HTML.it L'avatar di Inoki
    Registrato dal
    Oct 2001
    Messaggi
    788
    Originariamente inviato da VaLvOnAuTa
    Codice PHP:
    if ($_POST['campo1'] != "") {
     
    $where "campo1='".$_POST['campo1']."'";
    }
    if (
    $_POST['campo2'] != "") {
     
    $where .= ($where == "") ? "campo2='".$_POST['campo2']."'" " AND campo2='".$_POST['campo2']."'";
    }
    if (
    $_POST['campo3'] != "") {
     
    $where .= ($where == "") ? "campo3='".$_POST['campo3']."'" " AND campo3='".$_POST['campo3']."'";
    }
    mysql_query("SELECT * FROM tabella WHERE ".$where); 
    Se campo1 è = "" in questo script ci sarebbe un errore..io correggerrei con:
    Codice PHP:
    $where="";
    if (
    $_POST['campo1'] != "") {
     
    $where .= "campo1='".$_POST['campo1']."'";
    }
    if (
    $_POST['campo2'] != "") {
     
    $where .= ($where == "") ? "campo2='".$_POST['campo2']."'" " AND campo2='".$_POST['campo2']."'";
    }
    if (
    $_POST['campo3'] != "") {
     
    $where .= ($where == "") ? "campo3='".$_POST['campo3']."'" " AND campo3='".$_POST['campo3']."'";
    }
    mysql_query("SELECT * FROM tabella WHERE ".$where); 
    "La teoria è quando si sa tutto e niente funziona. La pratica è quando
    tutto funziona e nessuno sa il perché. In questo caso, abbiamo messo
    insieme la teoria e la pratica: non c'è niente che funziona... e nessuno sa
    il perché!" (Albert Einstein)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.