[PHP] requêtes dûre - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : [PHP] requêtes dûre (/showthread.php?tid=3956) Pages :
1
2
|
RE: [PHP] requêtes dûre - Plume - 14-11-2010 Z'êtes des artistes les caïds. Vous voyez pas que vous demandez à sélectionner les lignes où l'identifiant du membre vaut 38, que cette valeur est stockée dans la table Batiments_acquis et que donc la ligne que vous voulez afficher n'est pas concernée ? La clause LEFT marche très bien. Essayez ça pour voir :
La dernière proposition de niahoo va fonctionner. Le seul truc, c'est que sémantiquement il est mieux venu de ne pas mettre ce genre de conditions dans la clause ON d'une jointure mais il y a des exceptions RE: [PHP] requêtes dûre - niahoo - 14-11-2010 hmm je pige pas, tu postes deux fois la même mais dans aucune des deux n'apparaît «38» edit: en fait dans ta requete, les bâtiments vont être affichés autant de fois qu'un utilisateur l'a acquis _who, donc oui la clause LEFT marche, mais si on ne sait pas préciser l'ID d'untilisateur tu récup toute la table.. RE: [PHP] requêtes dûre - pascal - 14-11-2010 erf, oui. Dans ce cas, il faut aussi mettre NULL :
++ Pascal RE: [PHP] requêtes dûre - Hell-AstiK - 14-11-2010 (14-11-2010, 01:04 AM)niahoo a écrit : Marrant, le left-join marche pas... ceci me donne : (14-11-2010, 02:15 AM)_who a écrit : Z'êtes des artistes les caïds. Vous voyez pas que vous demandez à sélectionner les lignes où l'identifiant du membre vaut 38, que cette valeur est stockée dans la table Batiments_acquis et que donc la ligne que vous voulez afficher n'est pas concernée ?Dans l'ordre : et Comment tu as fait alors que tu n'a pas sélectionner un membre ? :heuuu: (14-11-2010, 10:40 AM)pascal a écrit : erf, oui. Dans ce cas, il faut aussi mettre NULL :Résultat : Merci à tous ! Je doit prendre celle de pascal ou de _who? RE: [PHP] requêtes dûre - Plume - 14-11-2010 De Pascal. Les deux miennes étaient là pour montrer que la clause LEFT marche forcément RE: [PHP] requêtes dûre - Hell-AstiK - 14-11-2010 J'ai compris le fonctionnement des jointures, mais après pour les exploiter en PHP, c'est pas trop ca encore... Si j'ai compris, pour savoir si je met le lien 'Entrer' ou 'Construire', je vérifie si le niveaux est supérieur à 0 ? si il l'est, je met 'Entrer', si il ne l'est pas(=NULL) je met 'Construire' ?? (en tout cas j'ai fait ca, et ça marche donc bon ^^) EDIT: Voilà le code que j'ai actuellement, ça fonctionne bien
Merci les gars (et fille si je ne me suis pas tromper) :bisou:pardon :good: RE: [PHP] requêtes dûre - srm - 14-11-2010 Je ne vois pas en quoi sémantiquement la requête de niahoo n'est pas correcte... RE: [PHP] requêtes dûre - Plume - 14-11-2010 Citation :The conditional_expr used with ON is any conditional expression of the form that can be used in a WHERE clause. Generally, you should use the ON clause for conditions that specify how to join tables, and the WHERE clause to restrict which rows you want in the result set. Citation :If there is no matching row for the right table in the ON or USING part in a LEFT JOIN, a row with all columns set to NULL is used for the right table. You can use this fact to find rows in a table that have no counterpart in another table: La clause ON est une clause qui permet de renseigner les conditions de jointures des tables. Il n'est pas question de restriction de sélection, juste d'indiquer quels champs permet de les joindre. On constate encore plus l'incohérence de mettre des expressions conditionnelles dans la clause ON quand on utilise à la place la clause USING. Il n'est pas possible d'écrire d'expressions conditionnelles, on ne peut que préciser les colonnes à prendre en compte pour la jointure. Pour comprendre la différence entre le prédicat de la clause de jointure et le prédicat du filtre WHERE, voyons le petit test suivant :
Une chose intéressante aussi est qu'il possible d'obtenir le même résultat que la dernière en faisant :
So, what the fuck? La clause WHERE est un filtre d'élimination. Il suppose que les différentes tables sont déjà jointes en une seule et parcourt l'ensemble des résultats à la recherche des lignes correspondant aux critères donnés. En revanche, la clause JOIN se comporte différemment. Elle agit AVANT que la jointure soit effective. Dans le cadre d'une jointure interne le comportement est similaire à celui d'une clause WHERE. Dans le cas d'une jointure externe il faut décomposer la logique en plusieurs étapes :
Reprenons la clause de jointure de la requête donnée : Code : TJ1.COL1 = TJ2.COL1 AND TJ1.COL2 = 'taratata' AND 1 = 0
… Pour comprendre la différence, il suffit de demander à voir les colonnes de la table TEST_JOIN2 dans les différents cas :
Code : COL1 COL2 COL1 COL2
Code : COL1 COL2 COL1 COL2
Code : COL1 COL2 COL1 COL2 Voilà. En bref, au niveau performance, cela ne change rien. Par contre, niveau conceptuel, il est beaucoup plus intéressant de différencier ce qui appartient à la jointure et ce qui appartient à la limitation du jeu de résultat. C'est d'autant plus intéressant que c'est humainement plus maintenable et plus lisible à mesure que la requête est conséquente. Sources : RE: [PHP] requêtes dûre - srm - 14-11-2010 Ok |