|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Candidat au titre de Membre du Club
![]() |
Bonjour,
Pour info j'utilise php 5 et mysql 5.0.41. Mon problème est le suivant je souhaite afficher les résultats de la table tarifs tout en affichant des infos de 3 autres tables donc j'ai fait ma requête avec des INNER JOIN seulement problème ça me fait un produit cartésien entre tous les champs de mes tables. Voici ma requête : Code :
Merci d'avance |
||
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
A priori, ta requête est OK. Combien as-tu de lignes dans chaque table ? Combien en obtiens-tu dans ta requête ?
|
|
|
00
|
|
|
#3 | ||
|
Candidat au titre de Membre du Club
![]() |
Nombre d'enregistrement :
Table Tarif : 192 Table Saison : 6 Table Duree : 8 Table Categorie : 6 Nombre qui sort de la requête : Table Tarif : 128 Table Saison : 128 Table Duree : 128 Table Categorie : 128 pour obtenir les résultats j'ai fais ça : Code :
En attendant pour que ça marche j'ai du faire 4 requêtes SQL différente mais j'aimerai bien optimiser en une seule requête si c'est possible Merci d'avance |
||
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
Un produit cartésien, c'est quand tu as toutes les combinaison entre toutes les lignes de toutes tes tables, ce qui te ferait 192 * 6 * 8 * 6 soit 55 296 lignes.
Quel résultat obtiens-tu, et qu'est qui te semble clocher ? |
|
|
00
|
|
|
#5 |
|
Membre éclairé
![]() Développeur Web Inscription : mai 2007 Messages : 282 ![]() |
Salut,
ta jointure ne te renverra que les enregistrements présents dans les 4 tables : par exemple si un tarif a une saison qui n'est pas dans la table saison OU s'il n'en a pas du tout il ne sera pas dans le résultat de la requête ... Si tu veux y arriver il va falloir faire des jointures gauche et droite .... Si tu fais un "count(*)" sur chaque table, cela sera moins lourd et plus clair. |
|
|
00
|
|
|
#6 | ||||
|
Candidat au titre de Membre du Club
![]() |
Ben c'est simple
regarde mes test : Affichage avec 4 requêtes : http://location-voiture.creation3w.com/test/test-1.php Affichage avec la requête SQL que j'ai marqué plus haut http://location-voiture.creation3w.com/test/test-2.php Pour moi ça fait un produit cartésien non ce que je souhaite c'est de pouvoir avoir un affichage correcte avec une seul requête mais là j'en suis loin. Vous avez une idée pourquoi ça fait ça ? Code source complet avec les 4 requete SQL Code :
Code :
|
||||
|
|
00
|
|
|
#7 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
Pourquoi tu me dis 128 lignes alors qu'il y en a quasiment assez pour crasher mon Mozilla ?
tu ne peux pas juste faire un mysql_num_rows() après exécuté ta requête ? |
|
|
00
|
|
|
#8 | ||
|
Membre du Club
![]() |
Oui ou simplement un
Code :
|
||
|
00
|
|
|
#9 | ||||
|
Candidat au titre de Membre du Club
![]() |
Pourquoi je disais 128 tous simplement parce que ça me dis 128 lol c'est ça qui est bizarre
voici ce que j'ai fais pour avoir 128 : 1er test : Code :
2ème test de fait Code :
bizarre non ? Bon ceci dis ça c'est bizarre certes mais que dois-je modifier sur ma requête pour que ça n'affiche pas 50000 résultats avec des doublons ? En fait faudrai arrivé à faire des 4 requêtes sql que j'ai mis dans mon post précédent en une seule si c'est possible Merci |
||||
|
|
00
|
|
|
#10 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
Je pense que ta requête est parfaitement OK, mais que c'est ton code PHP qui est dingue.
|
|
|
00
|
|
|
#11 | ||
|
Candidat au titre de Membre du Club
![]() |
Je veux bien remettre en cause mon code php mais je vais vous l'expliquer avant.
Il y a 4 boucles : La première boucle permet de faire autant de tableau qu'il y a de saison. La seconde me permet de faire autant de colonnes qu'il y a de tranches de durée dans une saison. La troisième et la quatrième marchant ensemble me permet de faire autant de ligne qu'il y a de catégorie tout en remplissant les cellules par rapport au nombre de tranche de durée tout en incrémentant la variable $m afin de prendre les résultats de la requêtes SQL (Les tarifs en l'occurrence). Je ne pense pas que je puisse réellement faire autrement que de faire 4 boucles afin de construire mes différents tableaux, de plus si mon code php était si dingue que ça pourquoi es ce qu'il marche parfaitement avec mes 4 requêtes SQL que j'ai poster plus haut et pourquoi il ne marcherai pas lorsque je fais une seul requête? Autre point je doute que ma requête SQL qui regroupe les 4 requêtes en une soit correcte car ça ne retourne que 128 hors dans la table tarifs je rappel que j'ai 192 résultats donc il manques forcement de plus si je fais un count sur les autres tables j'ai 128 partout alors que les autres table possède 6 - 8 et 6 enregistrement il y a forcement une erreur quelque part ou alors ma requête est correcte mais elle ne sert pas à faire ce que je veux. Ce que je souhaite c'est d'afficher les tarifs de la table Tarifs cette tables est composé des champs id_t (auto incrément de la table tarif), id_saison (correspondant à id_s de la saison), id_duree(correspondant à id_d de la table duree), id_categorie(correspondant à id_c de la table categorie), et du champ loca_tarif (c'est les tarifs). donc ce que je veux faire vous devez le devinez c'est d'afficher les tarifs tout en récupérant les infos des tables relative à chaque id. Exemple l'enregistrement suivant de la table tarifs : id_t id_saison id_duree id_categorie loca_tarif 1 1 2 1 30 donc je veux recupérer l'enregistrement où l'id_s correspond à 1 pour la table saison où id_d correspond à 2 pour la table duree et où id_c correspond à 1 pour la table categorie ect ect ect .... ce qui signifie que la requête SQL suivante : Code :
Dîtes moi si je ne suis pas clair mais je pense que le plus simple pour comprendre est de lire mes 4 requêtes ci-dessus et ce que je veux c'est en faire qu'une. Merci d'avance |
||
|
|
00
|
|
|
#12 |
|
Membre éclairé
![]() Damien AttanasioDéveloppeur informatique Inscription : février 2007 Messages : 340 ![]() |
On va commencer par le commencement
Que doit te retourner exactement ta requete ? Que veux tu afficher ? A ce que j'ai compris tu veux afficher ta liste de tarif, c'est a dire 192 résultats avec les données des autres tables qui s'y rattachent. |
|
00
|
|
|
#13 | ||
|
Candidat au titre de Membre du Club
![]() |
Oui c'est exactement ça en fait tu peux voir ce que je veux afficher ici :
http://location-voiture.creation3w.com/test/test-1.php Ce que tu vois sur cette page c'est mon test avec les 4 requêtes SQL. De plus sur cette page : http://location-voiture.creation3w.com/test/test-2.php Attention à ton navigateur ça risque de planté on peut voir que ma requête SQL déconne. PS : J'ai essayé la requête suivante : Code :
Merci |
||
|
|
00
|
|
|
#14 |
|
Membre éclairé
![]() Damien AttanasioDéveloppeur informatique Inscription : février 2007 Messages : 340 ![]() |
Ah oui effectivement, il y a un léger souci. Es tu sur que ce n'est pas ta boucle a l'affichage qui déconne ? As tu passé ta requete dans phpmyadmin pour voir ce que ça retourne ?
|
|
00
|
|
|
#15 |
|
Candidat au titre de Membre du Club
![]() |
Bien pensé l'idée de voir ce que ça donne dans PhpMyAdmin, avec Left Join tel que j'ai écrit la requête plus haut ça me donne pile ce que je veux
Je vais devoir faire un Flag pour finir les ligne et finir les tableaux. Merci ![]() Je mettrais mon code php terminer dans l'après midi une fois que je l'aurai
|
|
|
00
|
|
|
#16 |
|
Membre éclairé
![]() Damien AttanasioDéveloppeur informatique Inscription : février 2007 Messages : 340 ![]() |
Le coup de tester dans phpmyadmin c'est toujours un bon test.
Pour ma part, dès qu'une requete marche pas, je la colle dans phpmyadmin ou sqldeveloper (oracle, mysql) et je vérifie qu'il est correct. On pense trop souvent que le php est en cause alors que c'est le SQL qui fait n'importe quoi. Dans ton cas, c'est l'inverse mais ça t'a permis de voir ou était ton erreur |
|
00
|
|
|
#17 |
|
Candidat au titre de Membre du Club
![]() |
Bon ben tout ça pour rien
Car lorsque je fais ma requête avec les left join ont à vu plus haut que ça me retourner les bon résultat le problème c'est que je ne peux pas utilisé les résultat pour fabriquer mon tableau. Un tableau ce fait ligne par ligne en remplissant chaque cellule et c'est pas jouable je pensais simplifier en faisant une requête mais en faite c'est l'inverse dommage. Enfin si qqun voit comment faire je suis quand même preneur Merci encore pour votre aide A+ |
|
|
00
|
|
|
#18 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
PHP lira les résultats ligne à ligne en remplissant chaque cellule. Où est le problème ?
|
|
|
00
|
|
|
#19 |
|
Membre éclairé
![]() Damien AttanasioDéveloppeur informatique Inscription : février 2007 Messages : 340 ![]() |
Je ne vois pas le problème non plus.
|
|
00
|
Copyright © 2000-2012 - www.developpez.com