Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
892 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°328319
weed
Posté le 10-03-2003 à 15:39:03  profilanswer
 

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

mood
Publicité
Posté le 10-03-2003 à 15:39:03  profilanswer
 

n°328330
weed
Posté le 10-03-2003 à 15:43:18  profilanswer
 

j'ai regardé sur http://www.mysql.com/doc/search.ph [...] &doc=1&m=o
ms sans succes

n°328335
urd-sama
waste of space
Posté le 10-03-2003 à 15:44:47  profilanswer
 

recherche sous "jointure ouverte" (?)

n°328368
Mara's dad
Yes I can !
Posté le 10-03-2003 à 16:04:05  profilanswer
 

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é.
n°328530
weed
Posté le 10-03-2003 à 17:16:50  profilanswer
 

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
 
 

n°328541
weed
Posté le 10-03-2003 à 17:23:52  profilanswer
 

Urd-sama a écrit :

recherche sous "jointure ouverte" (?)


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

n°328571
urd-sama
waste of space
Posté le 10-03-2003 à 17:47:14  profilanswer
 

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 :.
n°328572
Mara's dad
Yes I can !
Posté le 10-03-2003 à 17:48:11  profilanswer
 

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é.
n°328573
Mara's dad
Yes I can !
Posté le 10-03-2003 à 17:50:57  profilanswer
 

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é.
n°328594
weed
Posté le 10-03-2003 à 18:11:28  profilanswer
 

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

mood
Publicité
Posté le 10-03-2003 à 18:11:28  profilanswer
 

n°328937
Mara's dad
Yes I can !
Posté le 10-03-2003 à 23:37:09  profilanswer
 

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é.
n°328942
Mara's dad
Yes I can !
Posté le 10-03-2003 à 23:43:04  profilanswer
 

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é.
n°329160
weed
Posté le 11-03-2003 à 02:44:41  profilanswer
 

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

n°329190
Mara's dad
Yes I can !
Posté le 11-03-2003 à 08:45:30  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
[SQL/Oracle] bases de donnees objets <-> je vais craquer[PHP] Tableaux: j'arrive pas à récupérer une valeur
Mettre au premier plan une fenêtre?J'arrive plus à mettre les couleurs autour d'une image :(
[PHP] Mettre du PHP dans des pages HTML ?Upload de fichier SQL de 12 Mo avec PHPMyAdmin [résolu]
PHP orienté objet: Class Caddie, pb : arrive pas a afficher l'objetSQL Server et les flags ??
J'arrive pas à faire un truc dans access expert demandé 
Plus de sujets relatifs à : [SQL] j'arrive pas a mettre (+) pr voire les gp qui n'ont pas de user


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR