Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    ricerca multicriteria sulla stessa tabella

    Ciao a tutti,
    sono un neofita del php e ho un problema per l'implementazione di una query di ricerca. Non avendo trovato altri post che assomigliassero al mio problema ho deciso di scomodarvi.

    La questione è la seguente:

    ho una tabella (jos_equipaggi) con 4 campi (id|data|nome|ruolo)
    ho un form html che mi da in uscita 3 variabili (per intenderci $data $nome £ruolo

    Quello che vorrei fare è visualizzare un elenco dei record della tabella jos_equuipaggi che contengono tutte e tre i criteri rappresentati dalle tre variabili.

    L'istruzione che ho usato è
    codice:
    $ricerca="SELECT jos_equipaggi.data, jos_equipaggi.user, jos_equipaggi.ruolo FROM jos_equipaggi WHERE jos_equipaggi.data='$data' or jos_equipaggi.user='$nome' or jos_equipaggi.ruolo='$ruolo' and jos_equipaggi.data<>'nessuno' and jos_equipaggi.user<>'nessuno' and jos_equipaggi.ruolo<>'nessuno'";
    'nessuno' è ciò che viene scritto in una delle variabii se non inserisco nulla in uno dei tre campi della ricerca.

    Quello che ottengo è corretto se inserisco solo un criterio ma già se ne metto due ottengo una tabella in cui ci sono tutti i record che contengono un criterio e tutti quelli che contengono l'altro e invece vorrei intersecare i due criteri e avere in uscita i record che soddisfano entrambi i criteri impostati, ovviamente.

    Non ci salto fuori e l'istruzione che ho usato è ovviamente errata ma le mie conoscenze qui si fermano.

    Grazie.
    Vitello

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    50
    Non basta mettere una and invece che una or tra gli elementi??

  3. #3
    L'AND non lo posso usare perchè non è detto che riempia tutti e tre i campi per la ricerca, magari due li lascio bianchi perchè cerco solo per data oppure ne lascio bianco solo uno perchè cerco per data e mansione e quindi avendo uno spazio bianco non ottengo nulla in output perchè non si verifica la condizione.

    Adesso ho provato con questo:

    codice:
    if ($data<>'nessuno')
            $ric_data="SELECT * FROM jos_equipaggi WHERE jos_equipaggi.data='$data'";
          ELSE $ric_data='';
    		  
          if ($nome<>'nessuno')
            $ric_nome="SELECT * FROM jos_equipaggi WHERE jos_equipaggi.user='$nome'";
          ELSE $ric_nome='';
    		  
          if ($ruolo<>'nessuno')
            $ric_ruolo="SELECT * FROM jos_equipaggi WHERE jos_equipaggi.ruolo='$ruolo'";
          ELSE $ric_ruolo='';
    		  
    		  
          $ricerca="SELECT * FROM jos_equipaggi 
             WHERE jos_equipaggi.data='$ric_data->data' AND jos_equipaggi.user='$ric_nome->nome' AND jos_equipaggi.ruolo='$ric_ruolo->ruolo'";
    ma naturalmente non funziona quando qualche campo ha valore 'nessuno' cioè non lo uso come criterio di scelta.
    (le variabili $data, $nome e $ruolo assumono il valore scelto in tre rispettivi campi di un form; se uno di questi non lo tocco rimane vuoto e la variabile associata assume valore 'nessuno')


    Vitello

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    591
    hai 2 possibilità:

    codice:
    $ricerca="SELECT jos_equipaggi.data, jos_equipaggi.user, jos_equipaggi.ruolo FROM jos_equipaggi WHERE (jos_equipaggi.data='$data' or '$data'='nessuno') and jos_equipaggi.user='$nome'  or '$nome'='nessuno') and 
    jos_equipaggi.ruolo='$ruolo'  or '$ruolo'='nessuno')";
    oppure

    codice:
      $ric="SELECT jos_equipaggi.data, jos_equipaggi.user, jos_equipaggi.ruolo FROM jos_equipaggi";
    
      if ($nome<>'nessuno' or $ruolo<>'nessuno' $data<>'nessuno')
      { $ric.=" where ";
        if ($data<>'nessuno')
            $ric.=" jos_equipaggi.data='$data' and";
          ELSE $ric_data='';
    
        if ($nome<>'nessuno')
            $ric.=" jos_equipaggi.user='$nome' and ";
    	  
        if ($ruolo<>'nessuno')
            $ric.=" jos_equipaggi.ruolo='$ruolo' and";
        $ric.=" 1=1";  
    }

  5. #5
    grazie per la risposta.

    Ho fatto come hai detto ma ricevo questo errore:

    Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in ../ricerca.php on line 42

    che si riferisce a questo pezzo di codice:
    codice:
    $ricerca="SELECT jos_equipaggi.data, jos_equipaggi.user, jos_equipaggi.ruolo FROM jos_equipaggi WHERE (jos_equipaggi.data='$data' or '$data'='nessuno') and jos_equipaggi.user='$nome'  or '$nome'='nessuno') and 
    jos_equipaggi.ruolo='$ruolo'  or '$ruolo'='nessuno')";
    $ric=mysql_query($ricerca, $Squadra69);
    		  print ('<table width=100% border=0>');
    		  while ($attualiDb = mysql_fetch_object($ric))
    		  {print("<tr>
    		              <td width='20%'>$attualiDb->data</td>
                          <td width='5%'>$attualiDb->user</td>
                          <td width='49%'>$attualiDb->ruolo</td>
     
                      </tr>");
              }
    
              print ('</table>');
    non capisco dove sta l'errore, mi puoi aiutare?

    Vitello

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2003
    Messaggi
    591
    Originariamente inviato da Vitello
    grazie per la risposta.

    Ho fatto come hai detto ma ricevo questo errore:

    Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in ../ricerca.php on line 42

    che si riferisce a questo pezzo di codice:
    codice:
    $ricerca="SELECT jos_equipaggi.data, jos_equipaggi.user, jos_equipaggi.ruolo FROM jos_equipaggi WHERE (jos_equipaggi.data='$data' or '$data'='nessuno') and jos_equipaggi.user='$nome'  or '$nome'='nessuno') and 
    jos_equipaggi.ruolo='$ruolo'  or '$ruolo'='nessuno')";
    $ric=mysql_query($ricerca, $Squadra69);
    		  print ('<table width=100% border=0>');
    		  while ($attualiDb = mysql_fetch_object($ric))
    		  {print("<tr>
    		              <td width='20%'>$attualiDb->data</td>
                          <td width='5%'>$attualiDb->user</td>
                          <td width='49%'>$attualiDb->ruolo</td>
     
                      </tr>");
              }
    
              print ('</table>');
    non capisco dove sta l'errore, mi puoi aiutare?

    Vitello
    codice:
    $ricerca="SELECT jos_equipaggi.data, jos_equipaggi.user, jos_equipaggi.ruolo FROM jos_equipaggi WHERE (jos_equipaggi.data='$data' or '$data'='nessuno') and (jos_equipaggi.user='$nome'  or '$nome'='nessuno') and 
    (jos_equipaggi.ruolo='$ruolo'  or '$ruolo'='nessuno')";

  7. #7
    Prova cosi.
    La prima riga ti trova solo se hai qualcosa in data
    La seconda ti trova se hai qualcosa in data e user
    Devi poi crearti le altre 5 possibilità.

    In totale dovrebbero essere:

    0 0 0
    1 0 0
    1 1 0
    1 1 1
    0 1 1
    0 0 1
    1 0 1

    Codice PHP:
    if (($jos.equipaggi.data != "") && ($jos.equipaggi.user == "") && ($jos.equipaggi.ruolo == ""))
    $query "SELECT * FROM jos.equipaggi  WHERE jos.equipaggi.data = '$jos.equipaggi.data' ORDER BY jos.equipaggi.id";

    if ((
    $jos.equipaggi.data != "") && ($jos.equipaggi.user != "") && ($jos.equipaggi.ruolo == ""))
    $query "SELECT * FROM fax  WHERE jos.equipaggi.data = '$jos.equipaggi.data' AND jos.equipaggi.user ='$jos.equipaggi.user' ORDER BY jos.equipaggi.id"
    Fammi sapere.

  8. #8
    Risolto!!!

    Ho usato il secondo blocco di codice che mi ha suggerito Stabi e funziona alla perfezione, grazie mille.

    L'opzione di provare tutte le combinazioni l'avevo già valutata ma mi sembrava un pò laboriosa, grazie comunque a Sanctis per la risposta.

    Vitello

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.