query di ricerca

Jons103

Nuovo Utente
16 Mag 2014
10
0
0
Ciao a tutti, è la prima volta che scrivo su questo forum.

Il mio problema è una query di ricerca su un sito di automobili

SELECT *
FROM auto JOIN marca ON (marca.ID = auto.ID_marca) JOIN modello ON (modello.ID = auto.ID_modello) JOIN cilindrata ON (cilindrata.ID = auto.ID_cilindrata) JOIN alimentazione ON (alimentazione.ID = auto.ID_alimentazione) JOIN tipo_auto ON (tipo_auto.ID = auto.ID_tipo_auto)
WHERE auto.ID_marca = marcaa AND auto.ID_modello = mod AND auto.ID_cilindrata = cilindr AND auto.ID_alimentazione = aliment AND auto.ID_tipo_auto = tipoauto

questa funziona, ma nel form di ricerca, devo selezionare per forza tutti i campi che sono cinque: marca, modello, cilindrata, alimentazione, tipo_auto.

Se io ne seleziono solo due la query non da risultatoe, vorrei che anche con solo due campi selezionati, es. marca(audi) e cilindrata (1.9), mi restituisse tutte le auto con queste caratteristiche.

aiutatemi, cosi imparo qualcosa in più.

grazie a tutti fin da ora.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, forse ti basta sostituire l'operatore AND con OR che ti visulazza i risultati quando almeno una delle condizioni si è verificata
 

Jons103

Nuovo Utente
16 Mag 2014
10
0
0
Ho provato, ma non funziona

il fatto è che la query deve restituire solo i risultati dei campi scelti nella form, che siano 1, 2 3, 4 o 5 campi.
es se scelgo il primo campo Audi ed il secondo A3 ed il terzo 1.9, mi deve visualizzare solo le auto di marca Audi modello A3 e cilindrata 1,9.

con OR mi restituisce quelli rispetto ad un solo campo, anche se ne ho selezionati 3.

aiuto!
 

Jons103

Nuovo Utente
16 Mag 2014
10
0
0
no, ho provato ma con OR ma poi la query prende in esame solo un parametro anche se ne scelgo 2 o più.

sicuramente devo creare una query complessa, aiuto !
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
A questo punto ti converrebbe affidarti al linguaggio lato server e costruire la query in base ai dati ricevuti in POST
Cosa usi PHP o ASP ?
 

Jons103

Nuovo Utente
16 Mag 2014
10
0
0
Uso PHP
La queri è costruita in base ai dati del form passati come POST.
Ho due pagine, una chiamata (ricerca.php) che contiene il form con i 5 campi e l' altra chiamata (risultato_ricerca.php) nella quale ho un recordset con la query.

devo solo capire come creare la query giusta che mi consenta di avere il risultato giusto per qualsiasi scelta io effettui nella pagina del form.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Una soluzione potrebbe essere cosi:
PHP:
<?php

$query = "SELECT * FROM tabella WHERE 1";

if (isset($_POST['marca']) && !empty($_POST['marca'])) {
    $query .= " && marca = '" . $_POST['marca'] . "'";
}

if (isset($_POST['modello']) && !empty($_POST['modello'])) {
    $query .= " && modello = '" . $_POST['modello'] . "'";
}

?>
ti sposto in php
 
Ultima modifica:

Jons103

Nuovo Utente
16 Mag 2014
10
0
0
potrebbe andare bene, ma io uso DREAMWEAVER e non riesco a creare la tabella dinamica per visualizzare i risultati, perche mi chiede di creare un recordset.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Non conosco dreamweawer, attendiamo qualcuno pratico.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
credo proprio che devi costruirti tramite php la query dinamicamente come ti ha suggerito crirc.
uso dream da anni ma non l'ho mai usato direttamente per lavorare con il db, in vista codice mi sono scritto (manina manina) il codice php che mi serve
 

Jons103

Nuovo Utente
16 Mag 2014
10
0
0
Forze hai ragione, ma con dreamweaver riesco a lavorare benissimo con i database, si può fare praticamente tutto. Il problema è solo capire come deve essere strutturata la query da inserire nel recordse; Per le mie conoscenze di mysql è troppo complicata se qualcuno può aiutarmi. Possibile nessuno ha mai fatto un sito con ricerca a più campi?
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
se guardi in giro per il forum ne trovi quante vuoi.
comunque posta il codice del form indicando quali sono i campi di input con cui vuoi fare la ricerca.
le tabelle sono quelle che hai indicato nella query che hai postato?
 

Jons103

Nuovo Utente
16 Mag 2014
10
0
0
Le tabelle, sono: auto, marca, modello, cilindrata, alimentazione, tipo_auto, anno

il codice del form è il seguente: (il modello cambia a seconda della marca) il javascript serve a questo.
PHP:
<script type="text/javascript">
function marc()
{
    document.cerca_auto.method = "post";
    document.cerca_auto.action = "cerca_auto.php";
    document.cerca_auto.submit();
}
</script>

<script type="text/javascript">
function mod()
{
    document.cerca_auto.method = "post";
    document.cerca_auto.action = "cerca_auto.php";
    document.cerca_auto.submit();
}
</script>

</head>

<body>
<div class="contenitore">
  <div id="intestazione"></div>
  <div id="menu"></div>
  <div id="contenuto">
    <div id="contenuto_sx_cerca">
      <form id="cerca_auto" name="cerca_auto" method="post" action="r_ricerca.php">
        <table width="191" border="0" cellspacing="5" cellpadding="5">
          <tr>
            <td align="right" valign="middle">Marca:</td>
            <td align="left" valign="middle"><label for="marca2"></label>
              <select name="marca" id="marca2" onchange="marc()">
                <option value="" <?php if (!(strcmp("", $_POST['marca']))) {echo "selected=\"selected\"";} ?>></option>
                <?php
do {  
?>
                <option value="<?php echo $row_RsMarca['ID']?>"<?php if (!(strcmp($row_RsMarca['ID'], $_POST['marca']))) {echo "selected=\"selected\"";} ?>><?php echo $row_RsMarca['marca']?></option>
                <?php
} while ($row_RsMarca = mysql_fetch_assoc($RsMarca));
  $rows = mysql_num_rows($RsMarca);
  if($rows > 0) {
      mysql_data_seek($RsMarca, 0);
	  $row_RsMarca = mysql_fetch_assoc($RsMarca);
  }
?>
              </select></td>
          </tr>
          <tr>
            <td align="right" valign="middle">Modello:</td>
            <td align="left" valign="middle"><label for="modello"></label>
              <select name="modello" id="modello" onchange="marc()">
                <option value="" <?php if (!(strcmp("", $_POST['modello']))) {echo "selected=\"selected\"";} ?>></option>
                <?php
do {  
?>
                <option value="<?php echo $row_RsModello['ID']?>"<?php if (!(strcmp($row_RsModello['ID'], $_POST['modello']))) {echo "selected=\"selected\"";} ?>><?php echo $row_RsModello['modello']?></option>
                <?php
} while ($row_RsModello = mysql_fetch_assoc($RsModello));
  $rows = mysql_num_rows($RsModello);
  if($rows > 0) {
      mysql_data_seek($RsModello, 0);
	  $row_RsModello = mysql_fetch_assoc($RsModello);
  }
?>
              </select></td>
          </tr>
          <tr>
            <td align="right" valign="middle">Cilindrata:</td>
            <td align="left" valign="middle"><label for="cilindrata"></label>
              <select name="cilindrata" id="cilindrata">
                <?php
do {  
?>
                <option value="<?php echo $row_RsCilindrata['ID']?>"><?php echo $row_RsCilindrata['cilindrata']?></option>
                <?php
} while ($row_RsCilindrata = mysql_fetch_assoc($RsCilindrata));
  $rows = mysql_num_rows($RsCilindrata);
  if($rows > 0) {
      mysql_data_seek($RsCilindrata, 0);
	  $row_RsCilindrata = mysql_fetch_assoc($RsCilindrata);
  }
?>
              </select></td>
          </tr>
          <tr>
            <td align="right" valign="middle">Alimentazione:</td>
            <td align="left" valign="middle"><label for="alimentazione"></label>
              <select name="alimentazione" id="alimentazione">
                <?php
do {  
?>
                <option value="<?php echo $row_RsAlimentazione['ID']?>"><?php echo $row_RsAlimentazione['alimentazione']?></option>
                <?php
} while ($row_RsAlimentazione = mysql_fetch_assoc($RsAlimentazione));
  $rows = mysql_num_rows($RsAlimentazione);
  if($rows > 0) {
      mysql_data_seek($RsAlimentazione, 0);
	  $row_RsAlimentazione = mysql_fetch_assoc($RsAlimentazione);
  }
?>
              </select></td>
          </tr>
          <tr>
            <td align="right" valign="middle">Tipo</td>
            <td align="left" valign="middle"><label for="tipo_auto"></label>
              <select name="tipo_auto" id="tipo_auto">
                <?php
do {  
?>
                <option value="<?php echo $row_Rs_Tipo_auto['ID']?>"><?php echo $row_Rs_Tipo_auto['tipo_auto']?></option>
                <?php
} while ($row_Rs_Tipo_auto = mysql_fetch_assoc($Rs_Tipo_auto));
  $rows = mysql_num_rows($Rs_Tipo_auto);
  if($rows > 0) {
      mysql_data_seek($Rs_Tipo_auto, 0);
	  $row_Rs_Tipo_auto = mysql_fetch_assoc($Rs_Tipo_auto);
  }
?>
              </select></td>
          </tr>
          <tr>
            <td align="right" valign="middle">Anno:</td>
            <td align="left" valign="middle"><label for="anno"></label>
              <select name="anno" id="anno">
                <option value="nessuno"></option>
                <?php
do {  
?>
                <option value="<?php echo $row_RsAnno['ID']?>"><?php echo $row_RsAnno['anno']?></option>
                <?php
} while ($row_RsAnno = mysql_fetch_assoc($RsAnno));
  $rows = mysql_num_rows($RsAnno);
  if($rows > 0) {
      mysql_data_seek($RsAnno, 0);
	  $row_RsAnno = mysql_fetch_assoc($RsAnno);
  }
?>
              </select></td>
          </tr>
          <tr>
            <td>&nbsp;</td>
            <td><input type="submit" name="button" id="button" value="Invia" /></td>
          </tr>
        </table>
      </form>
    </div>
    <div id="contenuto_centrale_cerca"></div>
    <div id="contenuto_dx_cerca"></div>
  </div>
</div>
</body>
</html>
<?php
mysql_free_result($RsMarca);

mysql_free_result($RsModello);

mysql_free_result($RsCilindrata);

mysql_free_result($RsAlimentazione);

mysql_free_result($Rs_Tipo_auto);

mysql_free_result($RsAnno);
?>
 
Ultima modifica di un moderatore:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
tanto per ricapitolare, tu vorrest es. che selezionando solo anno ti cercasse tutte le auto di quell'anno o selezionando cilindrata e marca ti cercasse tutte le auto di quella marca e cilindrata, ecc... con tutte le combinazioni possibili.
è così?
provo a buttare giù uno script, un po' di pazienza e vedo se riesco a fare qualcosa
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
se non ho capito male, ecco unp schema di quello che devi fare nella pagina r_ricerca.php
PHP:
<?php
//......
//definiamo due variabili
$joi="";
$whe="WHERE 1=1 ";
// che andremo a riempire in funzione di quello che hai selezionato
if(isset($_POST['marca']) && $_POST['marca'] !=""){//ha selezionato una marca
	$joi.=" JOIN marca ON (marca.ID = auto.ID_marca) ";
	$whe.=" AND auto.ID_marca=".$_POST['marca'];
}
if(isset($_POST['modello']) && $_POST['modello'] !=""){//ha selezionato un modello
	$joi.=" JOIN modello ON (modello.ID = auto.ID_modello) ";
	$whe.=" AND auto.ID_modello=".$_POST['modello'];
}
if(isset($_POST['cilindrata']) && $_POST['cilindrata'] !=""){//ha selezionato la cilindrata
	$joi.=" JOIN cilindrata ON (cilindrata.ID = auto.ID_cilindrata) ";
	$whe.=" AND auto.ID_cilindrata=".$_POST['cilindrata'];
}
if(isset($_POST['alimentazione']) && $_POST['alimentazione'] !=""){//ha selezionato l'alimentazione
	$joi.=" JOIN alimentazione ON (alimentazione.ID = auto.ID_alimentazione) ";
	$whe.=" AND auto.ID_alimentazione=".$_POST['alimentazione'];
}
if(isset($_POST['tipo_auto']) && $_POST['tipo_auto'] !=""){//ha selezionato il tipo_auto
	$joi.=" JOIN tipo_auto ON (tipo_auto.ID = auto.ID_tipo_auto) ";
	$whe.=" AND auto.ID_tipo_auto=".$_POST['tipo_auto'];
}
if(isset($_POST['anno']) && $_POST['anno'] !=""){//ha selezionato l'anno
	$joi.=" JOIN anno ON (anno.ID = auto.ID_anno) ";
	$whe.=" AND auto.ID_anno=".$_POST['anno'];
	//ho messo id_anno, ma mi sembrebbe inutile usare l'id dell'anno, come mi sembra inutile una tabella anno
}
//faccio una verifica
if($joi=="" || $whe=="WHERE 1=1 "){
	//non hai fatto nessuna selezione
	//eventuale messaggio e rimandi al form o dove vuoi
}else{
	//eseguita almeno una selezione
	//dati di connessione $conn=mysqli_connect("tuo_host","tuo_user","tua_passw","tuo_db") or die("ERRORE " . mysqli_error($conn));
	//crei la querystringa
	$q=" SELECT * FROM auto ".$joi.$whe;
	//e interroghi il db
	$result=mysqli_query($conn, $q);
	//mostri ecc...
}
//......
?>
devi fare delle prove perchè io non l'ho testata non avendo le tue tabelle
dimenticavo: verifica anche che abbia scritto bene i nomi dei campi di input e tabelle
 
Ultima modifica:

Jons103

Nuovo Utente
16 Mag 2014
10
0
0
Questo, va bene, solo che con Dreamweaver ho creato un recordset nel quale devo inserire una query con i vari filtri es.

SELECT* FROM auto ....JOIN ....WERE...

è solo la query che mi serve.