query di ricerca

  • Creatore Discussione Creatore Discussione Jons103
  • Data di inizio Data di inizio

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.
 
Ciao, forse ti basta sostituire l'operatore AND con OR che ti visulazza i risultati quando almeno una delle condizioni si è verificata
 
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!
 
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 !
 
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 ?
 
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.
 
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:
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.
 
Non conosco dreamweawer, attendiamo qualcuno pratico.
 
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
 
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?
 
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?
 
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:
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
 
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:
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.
 

Discussioni simili