8791 sujets

Développement web côté serveur, CMS

Bonjour, je bloque sur une requête super simple. J'ai des cases à cocher (ID_type_autre) qui modifient ma requete PHP. Pour l'exemple je teste sur 1 et 6.

J'ai écrit la requête super nulle mais qui marche, mais j'ai plus de 10 critères donc ce n'est pas possible.

J'ai une table avec des produits expert_produit_fiche avec comme ID id_fiche
J'ai une table de croisement des criteres expert_produit_type_autre_tbl avec une clé commune ID_fiche et les ID des criteres ID_type_autre

Dans ma table de croisement je vais trouver des valeurs du genre :
3,6 -> 3 pour ID_fiche et 6 pour ID_type_autre
3,2
3,1
2,1

L'idée finale est d'afficher les fiches qui ont exclusivement les criteres 1 et 6. Faut il tout envoyer dans un tableau ?


$requete_level = mysql_query("SELECT epf.titre FROM expert_produit_fiche epf ");
while ($row_requete_level = mysql_fetch_object($requete_level))
{

$requete_level2 = mysql_query("SELECT * FROM expert_produit_type_autre_tbl eptat WHERE eptat.ID_fiche = $row_requete_level->id_fiche AND eptat.ID_type_autre = 1 ");
if(mysql_fetch_object($requete_level2)!=0)
{

$requete_level3 = mysql_query("SELECT * FROM expert_produit_type_autre_tbl eptat WHERE eptat.ID_fiche = $row_requete_level->id_fiche AND eptat.ID_type_autre = 6 ");
if(mysql_fetch_object($requete_level3)!=0)
{
.... etc

echo '-> '.$row_requete_level2->ID_type_autre.' - '.$row_requete_level->id_fiche.' - '.$row_requete_level->titre.'<br/>';

}

}
}

J'ai essayé avec des requetes du genre : SELECT * FROM expert_produit_fiche epf JOIN expert_produit_type_autre_tbl eptat ON epf.id_fiche = eptat.ID_fiche WHERE eptat.ID_type_autre IN (1,6) GROUP BY eptat.ID_fiche

Mais ce n'est pas discriminant, ca me renvoi tous produits qui on en commun 1 et 6.

Merci
Salut

Je crois que ton code devra marché si tu fait une petite modification et que tu faits usage à la notion des sous sélections, sachant que ici tu auras besoin de spécifier les noms des champs que tu voudras récupérer, vu que tu auras besoin du nombre d'enregistrements retournés par epf.ID_fiche, dans la sous sélection:

SELECT * FROM (SELECT epf.ID_fiche, epf..., count(epf.ID_fiche) as nbr   FROM expert_produit_fiche epf JOIN expert_produit_type_autre_tbl eptat ON epf.id_fiche = eptat.ID_fiche WHERE eptat.ID_type_autre=6 or eptat.ID_type_autre=1  GROUP BY epf.ID_fiche) as fiches where fiches.nbr=2


Et cette requête pourra bien être adapter pour tes dizaines de critères (Après validation des tests bien sûr Smiley smile )

Pour ton code PHP oublie ça Smiley biggol , car quand on travaille sur une base le sql et le langage transactionnel sont assez suffisants pour avoir les informations voulues, toute fois ce code c'est un consommateur intense de ressources, et pertes de temps Smiley sweatdrop .

Bonne courage pour le reste.
Modifié par unami (13 Mar 2012 - 18:24)
Franchement a priori ca fonctionne et je te remercie énormément, je ne comprends pas trop la syntaxe... Je vais faire des tests en agrégeant des critères.