SELECT et MIN() avec plusieurs champs
Posté : 19 nov. 2009, 23:08
Bonjour 
Je debute en php et je me suis fixé de faire un petit moteur de recherche. J'ai pas mal galeré pour en arriver la ou j'en suis, mais je crois avoir atteint ma limite, et j'ai besoin d'aide, mais surtout de conseils par rapport a mon code (qui est grosso modo un copier collé de mal d'exemple que j'ai deniché sur le net) J'utilise une base de donnée SQL avec un table items composée des champs id, vendeur, nom, image, tags et prix. Cette table est remplie d'items plus ou moins inventés, tous en rapport avec le medieval fantastique.
J'ai reussi a coder ce que j'appelle la recherche global, c'est a dire que je tape epée dans ma zone de texte, et toutes les epées vendues sur le royaume apparaissent dans un tableau, avec le prix, le vendeur, l'image etc..
J'ai aussi reussi (enfin, j'ai bien pomper surtout) a faire en sorte que la recherche soit plus precise en tapant deux(ou plus) mots clefs (tags), par exemple, je peux ecrire epée courte, ou bien epee lanfeust pour afficher toutes les épees vendues par Lanfeust.
La ou je bute, c'est dans une option de filtrage via un bouton. En effet, j'aimerai qu'il soit possible, apres avoir fait une premiere recherche globale, de cliquer sur un bouton qui filtrerai les resultats de la premiere recherche pour ne laisser que le moins cher de chaque item. Par exemple, si je fais une recherche globale avec le mot épée, mon tableau va se peupler de 50 items, (5 types d'épées vendues par 10 marchands differents). En cliquant sur le bouton, je voudais qu'il ne reste que 5 items (la moins chere de chaque type d'epee).
J'ai d'abrod cru que j'avais reussi, en utilisant un min() dans une requete SQL
Le probleme avec cette requete, c'est que si elle me trouve bien le moins cher des items, elle n'affiche pas le bon vendeur qui va avec. j'ai essayé un peu tout et n'importe quoi, mais mes connaissances etant limitées, ca n''a pas mené a grand chose.
un peu d'aide, une piste, un indice, n'importe quoi serait vraiment tres appreciable 
je colle mon (tres moche) code:
Je debute en php et je me suis fixé de faire un petit moteur de recherche. J'ai pas mal galeré pour en arriver la ou j'en suis, mais je crois avoir atteint ma limite, et j'ai besoin d'aide, mais surtout de conseils par rapport a mon code (qui est grosso modo un copier collé de mal d'exemple que j'ai deniché sur le net) J'utilise une base de donnée SQL avec un table items composée des champs id, vendeur, nom, image, tags et prix. Cette table est remplie d'items plus ou moins inventés, tous en rapport avec le medieval fantastique.
J'ai reussi a coder ce que j'appelle la recherche global, c'est a dire que je tape epée dans ma zone de texte, et toutes les epées vendues sur le royaume apparaissent dans un tableau, avec le prix, le vendeur, l'image etc..
J'ai aussi reussi (enfin, j'ai bien pomper surtout) a faire en sorte que la recherche soit plus precise en tapant deux(ou plus) mots clefs (tags), par exemple, je peux ecrire epée courte, ou bien epee lanfeust pour afficher toutes les épees vendues par Lanfeust.
La ou je bute, c'est dans une option de filtrage via un bouton. En effet, j'aimerai qu'il soit possible, apres avoir fait une premiere recherche globale, de cliquer sur un bouton qui filtrerai les resultats de la premiere recherche pour ne laisser que le moins cher de chaque item. Par exemple, si je fais une recherche globale avec le mot épée, mon tableau va se peupler de 50 items, (5 types d'épées vendues par 10 marchands differents). En cliquant sur le bouton, je voudais qu'il ne reste que 5 items (la moins chere de chaque type d'epee).
J'ai d'abrod cru que j'avais reussi, en utilisant un min() dans une requete SQL
$result = mysql_query("SELECT nom, image, vendeur, MIN(prix) AS prix FROM matable GROUP BY nom ORDER BY prix");
matable etant une table intermedaire regroupant les resultats de la premiere recherche.Le probleme avec cette requete, c'est que si elle me trouve bien le moins cher des items, elle n'affiche pas le bon vendeur qui va avec. j'ai essayé un peu tout et n'importe quoi, mais mes connaissances etant limitées, ca n''a pas mené a grand chose.
je colle mon (tres moche) code:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" media="screen" type="text/css" title="Design" href="style.css" />
</head>
<body>
<form action="index.php" method="get">
Cherchez: <input type="text" name="i" />
<input type = "hidden" name = "moinsCher" value = "0" />
<input type="submit" value="Go"/>
</form>
<?php
if (isset($_GET["i"]))
{
$entree = $_GET["i"];
$entree2 = $_GET["moinsCher"];
require("connection.php");
// plusieurs mots clefs dans la recherche +++++++++++++
$mots = explode(" ", $entree);
$nombre_mots = count($mots);
$valeur_requete = '';
for($nombre_mots_boucle = 0; $nombre_mots_boucle < $nombre_mots; $nombre_mots_boucle++)
{
$valeur_requete .= 'AND tags LIKE \'%' . $mots[$nombre_mots_boucle] . '%\'';
}
$valeur_requete = ltrim($valeur_requete,'AND');
///////////////////////////////////////////////////////
if ($entree2 == 1)
{
$create_table = "CREATE TEMPORARY TABLE matable AS SELECT * FROM item WHERE $valeur_requete";
$lacreation = mysql_query($create_table) or die ('Erreur création table temporaire');
$result = mysql_query("SELECT nom, vendeur, image, MIN(prix) AS prix FROM matable GROUP BY nom ORDER BY prix"); // recherche filtrée
}
else {$result = mysql_query("SELECT * FROM item WHERE $valeur_requete ORDER BY prix");} // recherche globale
// TABLEAU ///////////////////////////////////
echo "<table border='1'>
<tr>
<th>Vendeur</th>
<th>Prix</th>
<th>Item</th>
</tr>";
?>
<form action="index.php" method="get">
<input type = "hidden" name = "moinsCher" value = 1 />
<input type = "hidden" name = "i" <?php echo 'value="' . $entree . '"'; ?> />
<input type="submit" value = "Moins Cher"/>
</form>
<?php
while($row = mysql_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['vendeur'] . "</td>";
echo "<td>" . $row['prix'] . "</td>";
echo "<td>" . "<a href='index.php?i=" . $row['nom'] . " '>" . " <img src=images/" . $row['image'] . " />" . "</a>" . $row['navn'] . "</td>";
echo "</tr>";
}
echo "</table>";
mysql_close($con);
}
?>
</body>
</html>