[SQL] j'arrive pas a mettre (+) pr voire les gp qui n'ont pas de user

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:39:03    

voici mon code  
 

Citation :

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

Reply

Marsh Posté le 10-03-2003 à 15:39:03   

Reply

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

Reply

Marsh Posté le 10-03-2003 à 15:44:47    

recherche sous "jointure ouverte" (?)

Reply

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 :
  1. SELECT
  2. group_name,
  3. admin.pseudo
  4. FROM
  5. phpbb_groups,
  6. phpbb_user_group,
  7. admin
  8. WHERE
  9. phpbb_groups.group_id = phpbb_user_group.group_id
  10. AND phpbb_user_group.user_id = admin.id


 
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 :
  1. SELECT
  2. group_name,
  3. admin.pseudo
  4. FROM
  5. phpbb_groups,
  6. phpbb_user_group,
  7. admin
  8. WHERE
  9. phpbb_groups.group_id = phpbb_user_group.group_id(+)
  10. AND phpbb_user_group.user_id = admin.id(+)


 
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 ? ? ?


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

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 çà :  
 

Code :
  1. SELECT
  2. group_name,
  3. admin.pseudo
  4. FROM
  5. phpbb_groups,
  6. phpbb_user_group,
  7. admin
  8. WHERE
  9. phpbb_groups.group_id = phpbb_user_group.group_id
  10. AND phpbb_user_group.user_id = admin.id

 
 
Je trouve que c'est plus lisible.


 
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 ?  
 
Enfin, la table admin. La encore, je doit supposer :  
C'est une table qui donne une liste de USERS qui sont administrateurs ?  


 
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 ?  
 
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 çà ?


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 :
  1. You have an error in your SQL syntax near '(+)


 

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
 
 

Reply

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

Reply

Marsh Posté le 10-03-2003 à 17:47:14    

weed a écrit :


saurais tu comment ca se dit en anglais pr faire ma recherche sur mysql.com


hum trop tard, j'aurais pu demander à un collègue mais là je suis à la maison  [:spamafote]


---------------
.: Clône de Drasche .:. Ebichuleys .:. Avec l'Aloe Vera je fais de beaux cacas [:dawa] .: www.oserselancer.com :.
Reply

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
 group_name,
 admin.pseudo
FROM
 phpbb_groups LEFT JOIN
 (
  phpbb_user_group LEFT JOIN
   admin ON phpbb_user_group.user_id = admin.id
 ) ON phpbb_groups.group_id = phpbb_user_group.group_id
WHERE
 admin.id IS NULL


 
 
Malheureusement, je n'ai pas de MySql sous la main pour faire des tests.
 
A+


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

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.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

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 :
  1. requête SQL : 
  2. SELECT
  3. group_name,
  4. admin.pseudo
  5. FROM
  6. phpbb_groups LEFT JOIN
  7. (
  8. phpbb_user_group LEFT JOIN
  9.   admin ON phpbb_user_group.user_id = admin.id
  10. ) ON phpbb_groups.group_id = phpbb_user_group.group_id LIMIT 0, 30


 
j'ai comme erreur :

Citation :

MySQL a répondu:
 
 
You have an error in your SQL syntax near '(
 phpbb_user_group LEFT JOIN
  admin ON phpbb_user_group.user_id = admin.id
' at line 6


 
bon laisse tomber si tu sais vraiment pas je ferais 2 requetes
une pr les user (admin)  
une pr les gp

Reply

Marsh Posté le 10-03-2003 à 18:11:28   

Reply

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.


Message édité par Mara's dad le 10-03-2003 à 23:38:45

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

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  :D


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

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.  
 
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).


 
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  :D


ke signifie l'abréviations MPD ????
 
 

Reply

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 !
 


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed