Page 1 sur 1

Moteur de recherche sur plusieurs tables

Posté : 24 avr. 2007, 15:29
par stefane321
Bonjour,

J'aimerais avoir votre aide pour coder un moteur de recherche interne à mon site de vente en ligne.

J'ai trouvé plusieurs tutoriel sur google mais qui recherche un mot dans une seule table.

Se que j'aimerais c'est effectuer une recherche selon la categorie de produit et selon l'attribut de produits choisie.

Voici les table a rechercher:
  • produits
    produits_attributs
    produits_attributs_details
Le but est que mon client vend des chapeaux de fourrure. Il y a au total environs 200 chapeaux différent et on souhaite que le client puisse faire une recherche selon le type de fourrure, le tissus du chapeaux, la couleur.

Le formulaire du moteur de recherche est composé de <select>

Voici mon formulaire:
include("config.php");
echo "<table width=\"100%\" align=\"center\" CELLPADDING=\"1\" CELLSPACING=\"1\" class=\"border\">\n";
echo "<TR>\n";
echo "<TD class=\"border3\" align=\"center\"><b>".panier_76."</b></td>\n";
echo "</tr>\n";
echo "<TR>\n";
echo "<TD>\n";
echo "<form action=\"recherche.php\" method=\"post\">\n";

mysql_connect($host,$login,$password) or die("Impossible de connecter la bd");
$base=mysql_select_db($db) or die("erreur de DB");
$sql=mysql_query("select * from produits_categories order by categorie_id ASC") or die("Impossible d'ouvrir la table");
echo "<b>".panier_78."</b>\n";
echo "<select name='categorie_id'>\n";
echo "<option value=\"0\">".panier_74."</option>\n";

while ($categorie=mysql_fetch_array($sql))
{
echo "<option value=\"".$categorie["categorie_id"]."\">".stripslashes($categorie["nom_cat_".$_SESSION["lang"].""])."</option>\n";
}
echo "</select>\n";

echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<TD>\n";

$sql2="SELECT * FROM attributs_produits order by id";
$result2 = mysql_query($sql2);
echo "<table cellpadding=\"0\" width=\"100%\" cellspacing=\"0\">\n";

$temp=1;
while($row2 = mysql_fetch_array($result2))
{
$productid = $row2["id"];
  if ( $temp == 1 )
  { 
	  echo("<tr>"); 
  }
$photos=$row2[0];
	//echo "<tr>\n";
	echo "<td valign=\"top\" class=\"texte\"><b><nobr>".$row2["nom_".$_SESSION["lang"].""]." :</b></nobr></td>\n";
	echo "<td><input type=\"hidden\" name=\"attribut_".$row2["id"]."\" value=\"".$row2["id"]."\">";
	$sql5="SELECT * FROM attributs_produits_details where id_attribut=".$row2["id"]." order by id_attribut";
	$result5 = mysql_query($sql5);
	//-----------------------------------------------------------
	echo "<select name='attribut_details_".$row2["id"]."'>\n";
	echo "<option value=\"0\">".panier_74."</option>\n";

	while($row5 = mysql_fetch_array($result5))
	{
	
		echo "<option value=\"".$row5["id"]."\">".stripslashes($row5["nom_".$_SESSION["lang"].""])."</option>\n";
	}
	echo "</select><BR><BR>\n";
	
if ( $temp == 2 ) { echo("</tr>"); $temp = 0 ;}

$temp++; 
}
echo "</TABLE>\n";

echo "</td>\n";
echo "</tr>\n";
echo "<tr>\n";
echo "<TD align=\"center\">\n";
echo "<input type=\"submit\" name=\"go_recherche\" value=\"".panier_77."\">\n";
echo "</form>\n";
echo "</TD>\n";
echo "</TR>\n";
echo "</TABLE>\n";
En espérant que vous pourrez m'aider.

Merci!

Posté : 24 avr. 2007, 16:10
par Ryle
Comment sont liées tes différentes tables ? Le plus simple serait de faire une seule requête avec des jointures sur chaque table, et filtrer le résultat en ajoutant dans un WHERE les critères de sélection de l'utilisateur :
$sql = " SELECT ... FROM ... WHERE ...";

if ($detail!= '') {
  $sql.= " AND detail = '".$detail ."'";
}

Ma jointure

Posté : 24 avr. 2007, 21:12
par stefane321
Voici un exemple du début de ma requête:
$sql_pa="SELECT pa.id, pa.id_produit, pa.defaut, pa.id_attribut, ".

"p.id, p.name_FR, p.name_US, p.description_FR, p.description_US, p.categorie_id, p.prix, p.image ".

"FROM produits AS p, produits_attributs AS pa ".

"WHERE pa.id_attribut='".$_POST['id_attribut']."' AND p.categorie_id='".$_POST['categorie_id']."'";
Là où je me pose une sérieuse question est que pour un même enregistrement de la table produits j'ai jusqu'a 4 enregistrements pour ce produit dans les tables produits_attributs et produits_attributs_details mais évidemment avec des id d'attributs différents.

Se qui fait que mon formulaire de recherche envoie jusqu'a 3 id_attribut différents au champ pa.id_attribut.

Comment gérer ça svp?

Merci!