j'arrive pas a mettre (+) pr voire les gp qui n'ont pas de user [SQL] - PHP - Programmation
Marsh Posté le 10-03-2003 à 15:43:18
j'ai regardé sur http://www.mysql.com/doc/search.ph [...] &doc=1&m=o
ms sans succes
Marsh Posté le 10-03-2003 à 16:04:05
Le (+), faut le mettre dans une clause WHERE, pas dans le SELECT !
Bon, déjà, la requête, je l'écrit comme çà :
Code :
|
Je trouve que c'est plus lisible.
Ensuite, je vois pas trop ce que fait ta requête.
Y'a une table phpbb_groups : OK. La table des GROUPES quoi !
Y'a une table phpbb_user_group : OK La table qui associe les USERS et les GROUPES.
Je suppose qu'il doit y avoir une table USER, Non ?
Enfin, la table admin. La encore, je doit supposer :
C'est une table qui donne une liste de USERS qui sont administrateurs ?
Bon alors, que fait cette requête ?
Elle liste les pseudos des Admins avec leur(s) Groupe(s) associés.
Et toi, tu veux aussi les groupes qui n'ont pas d'admin, c'est bien çà ?
Donc il faut générer des valeurs nulles pour les champs inéxistant dans les liaisons, ici, c'est :
phpbb_user_group.group_id
et
admin.id,
DONC
Code :
|
Tout çà bien sûr si mes suppositions sont éxactes. Mais comme y faut toujours jouer les devins avec les gens qui posent des questions, ben forcément, je ne garanti rien !
Relis ta question en essayant de faire abstraction de ce que tu sais. Tu trouves pas que c'est un peu light ? ? ?
Marsh Posté le 10-03-2003 à 17:16:50
olala Mara's dad j'ai jms vu une reponse aussi claire que ca
je te remercie mille fois pr le tps que tu as consacré pr autant détaillé
Citation : Bon, déjà, la requête, je l'écrit comme çà :
|
tu as tt a fait raison, c'est ce que je faisais qd je faisais un peu de sql sous oracle
malheuresement sous php on est obligé de mettre la requete sur une seuligne avec MYSQL_QUERY(" " );
ou sinon je sais on peut mettre ca ds une variable et faire des concatenations avec des .=
Citation : Je suppose qu'il doit y avoir une table USER, Non ? |
oui en effet les admin st des user,
j'ai en fait repris le script de zoneadmin pr sa joli interface et la je suis en train de l'etoffer
ds ce soft les users st des admins, je sais moi ausi ca ma rebuter un peu
Citation : Bon alors, que fait cette requête ? |
oui exactement, j'aimerais lister ts les groupes n'ayant pas "d'admin"
Citation : Tout çà bien sûr si mes suppositions sont éxactes. Mais comme y faut toujours jouer les devins avec les gens qui posent des questions, ben forcément, je ne garanti rien ! |
malheuresement j'ai tjrs l'erreur :
Code :
|
Citation : Relis ta question en essayant de faire abstraction de ce que tu sais. Tu trouves pas que c'est un peu light ? ? ? |
euuh colmparé a ce que tu me reponds effectivement, ms je la trouvé déjà suffisamment concise. Tu l'a meme compris ma question
visiblement il n'aime pas les (+) cet enfoiré de MySQL, est que cela est du au limitation de mysql
Marsh Posté le 10-03-2003 à 17:23:52
Urd-sama a écrit : recherche sous "jointure ouverte" (?) |
saurais tu comment ca se dit en anglais pr faire ma recherche sur mysql.com
Marsh Posté le 10-03-2003 à 17:47:14
weed a écrit : |
hum trop tard, j'aurais pu demander à un collègue mais là je suis à la maison
Marsh Posté le 10-03-2003 à 17:48:11
Bon, OK !
(+), c'est un syntaxe ORACLE !
J'avais pas compris que tu utilisais MySql.
Avec MySql, on fait des LEFT JOIN !
Sinon, tu dis :
Citation : j'aimerais lister ts les groupes n'ayant pas "d'admin" |
Donc :
admin.id IS NULL
Ce qui donne un truc du genre :
SELECT |
Malheureusement, je n'ai pas de MySql sous la main pour faire des tests.
A+
Marsh Posté le 10-03-2003 à 17:50:57
Y'a un truc qui cloche !
A quoi sert : admin.pseudo si on veux les groupes sans admin ?
A rien, donc on le vire !
Ou bien tu veux tous les groupes, admin ou pas, alors vire simplement la clause WHERE.
Marsh Posté le 10-03-2003 à 18:11:28
euhh non pseudo me sert a fficher les user
visiblement tu n'as peut etre pas compris de ce que je cherchais
je te mets ce que j'aimerais ce que cela affiche (les gp ayant ou non un user)
group_name pseudo
Gp Abonné admin
Gp Abonné toto
Gp contact titi
Anonymous
left join, jamais entendu parlé de ca ....
maleureusement
avec :
Code :
|
j'ai comme erreur :
Citation : MySQL a répondu: |
bon laisse tomber si tu sais vraiment pas je ferais 2 requetes
une pr les user (admin)
une pr les gp
Marsh Posté le 10-03-2003 à 23:37:09
Bon, je suis chez moi, et là j'ai MySql sous la main.
J'ai donc créé les tables qui vont bien pour faire des tests, et çà marche, sauf que MySql comprends pas les parenthèses.
Il suffit donc de les enlever ( Intelligement ! ) ce qui donne :
SELECT
group_name,
admin.pseudo
FROM
phpbb_groups LEFT JOIN phpbb_user_group
ON phpbb_groups.group_id = phpbb_user_group.group_id
LEFT JOIN admin
ON phpbb_user_group.user_id = admin.id
Et çà marche très bien.
Voilà, SQL c'est pas compliqué, il suffit d'écrire se qu'on veut faire en respectant la syntaxe un peu spéciale de chaque éditeur.
Marsh Posté le 10-03-2003 à 23:43:04
Celà dit, je commence à comprendre mieux la syntaxe Oracle.
Les (+), c'est vraiement beaucoup plus facile à écrire:
On écrit d'abord la requête normale, sans se poser de question, avec toutes les jointures dans le WHERE.
Ensuite, il suffit de rajouter des (+) dans les jointures, du coté ou il risque de manquer des enregistrements (Ne pas oublier d'aller jusqu'au bout de la chaîne).
Bien sûr, avec un bon MPD de la base sous les yeux c'est plus facile
Marsh Posté le 11-03-2003 à 02:44:41
oui en effet ca marche sans parenthèse
Citation : Voilà, SQL c'est pas compliqué, il suffit d'écrire se qu'on veut faire en respectant la syntaxe un peu spéciale de chaque éditeur. |
arf c vraiment dommage qu'il n'utilise pas la meme syntaxe qu'oracle qui est la refence absolu pr moi ...
d'autant plus que contrairement à SQLserver de MS c pas proprio, ils aurait pu faire un petit effort
Citation : On écrit d'abord la requête normale, sans se poser de question, avec toutes les jointures dans le WHERE. |
bah en gros, tu peux rester ds le meme état d'espris, tu fais ta clause where sans se sousier du pb puis apres tu mets des LEFT JOIN
Y a t'il un sens ???
c'est qd meme un peu bizzare ce type de syntaxe qd meme ???
c un type de jointure spécifique ou pas ??? est que ca existe sous sql/oracle
Citation : (Ne pas oublier d'aller jusqu'au bout de la chaîne) |
oui en effet si j'ai 2 jointure et qu'il manque deja un enregistrement des la 1ere il faut faire la 1er et la 2è jointure, jusqu'au bout
Citation : Bien sûr, avec un bon MPD de la base sous les yeux c'est plus facile |
ke signifie l'abréviations MPD ????
Marsh Posté le 11-03-2003 à 08:45:30
La référence, c'est SQL92, une norme ANSI.
Dans cette norme, on fait des JOIN, (RIGHT ou LEFT)...
C'est Oracle qu'est pas standard avec son (+)! Mais moi aussi je préfère çà.
MPD : Modèle Physique de Donnée, un dessin quoi !
Marsh Posté le 10-03-2003 à 15:39:03
voici mon code
SELECT group_name, admin.pseudo FROM phpbb_groups, phpbb_user_group, admin WHERE phpbb_groups.group_id = phpbb_user_group.group_id AND phpbb_user_group.user_id = admin.id
voici le resultat :
group_name pseudo
Gp Abonné admin
Gp Abonné toto
Gp contact titi
or je me suis cree d'autre groupe qui n'ont pas de user comme anonymous et j'aimerais les lister
dc si je me souviens bien on mets un (+) sur le champs oui un manque dc ds mon cas (+)admin.pseudo
ms y a l'eerreur
You have an error in your SQL syntax near '+)admin.pseudo FROM phpbb_groups, phpbb_user_group, admin WHERE phpbb_groups.gro' at line 1
est pas possible pr MYSQL, j'ai appris ca pr du sql/oracle