jointure + count - SQL/NoSQL - Programmation
Marsh Posté le 27-06-2006 à 16:36:48
Code :
|
Marsh Posté le 27-06-2006 à 16:38:13
Comment te l'explique très bien ton erreur, tu ne peux pas te servir de MIN,MAX, COUNT sans avoir un GROUP BY à la fin de ta requête.
Tu peux d'ailleurs lire la doc à ce sujet: http://dev.mysql.com/doc/refman/5. [...] tions.html
Dans ton cas il est necessaire que tu changes un peu ta requête car tu ne peux pas faire un group by "*", il va falloir que tu spécifies les champs sur lesquels tu souhaites grouper.
Enfin, la requête donnée par alien_nan ne réponds pas à la question puisqu'elle ne remonte que le 'count', count qui est également faux puisque s'il n'y a pas d'enregistrement qui vérifie la jointure elle remonte tout de même 1.
Marsh Posté le 27-06-2006 à 16:41:20
désolé, j'ai du mal à comprendre...
Car, je ne groupe pas sur groups.* mais sur aacls.group_id non ?
Je viens d'essayer ca :
Code :
|
Et apparement, ca fonctionnent, je vais faire + de test pour vérifier
Marsh Posté le 27-06-2006 à 16:48:06
anapajari a écrit : Comment te l'explique très bien ton erreur, tu ne peux pas te servir de MIN,MAX, COUNT sans avoir un GROUP BY à la fin de ta requête. Dans ton cas il est necessaire que tu changes un peu ta requête car tu ne peux pas faire un group by "*", il va falloir que tu spécifies les champs sur lesquels tu souhaites grouper. Enfin, la requête donnée par alien_nan ne réponds pas à la question puisqu'elle ne remonte que le 'count', count qui est également faux puisque s'il n'y a pas d'enregistrement qui vérifie la jointure elle remonte tout de même 1. |
le nb d'acl correspond au nb de fois ou id_groups apparait (a moins que je n'ai pas compris)
par contre, ce serait peut etre mieux avec une jointure interne pour que la jointure soit forcement valide, non ?
Marsh Posté le 27-06-2006 à 16:49:46
relis l'exemple de la doc
Code :
|
Le group by s'effectue sur toutes les colonnes sur lesquels tu n'appliques pas de "fonction".
edit:
alien_nan a écrit : le nb d'acl correspond au nb de fois ou id_groups apparait (a moins que je n'ai pas compris) |
Bouuh comment t'as tout changé ta requête ... honte à toi!!!
Je te rappele que tu avais fait un:
Code :
|
edit2: t'as pas l'air d'avoir changé ton post, j'en deduis donc que tu l'as effacé c'est encore pire
Marsh Posté le 27-06-2006 à 16:57:55
anapajari a écrit : relis l'exemple de la doc |
Le group by s'effectue sur toutes les colonnes sur lesquels tu n'appliques pas de "fonction".
edit:
Bouuh comment t'as tout changé ta requête ... honte à toi!!!
Je te rappele que tu avais fait un:
Code :
|
Je viens de relire, et je ne vois pas en quoi il y aura un souci. S'il fait une jointure interne, il n'aura que des élements valides, et le group by se fera sur les éléments issus de la requete, jointure et where effectué avant ?
Marsh Posté le 27-06-2006 à 17:03:00
anapajari a écrit :
edit:
Bouuh comment t'as tout changé ta requête ... honte à toi!!!
Je te rappele que tu avais fait un:
Code :
|
edit2: t'as pas l'air d'avoir changé ton post, j'en deduis donc que tu l'as effacé c'est encore pire
1° ) j'avais ecrit une erreur ds la premiere qui n'est pas lié au count(1) mais sur une requete fausse (que tu as repris) car j'avais lu trop vite. j'ai effacé car laisser une erreur en attendant que je corrige est certainement moins judicieux que de l'effacer....
2°) count(1) est plus performant que count(*) ou count(nom_d_un_cham_quelconque) et ce n'est pas une erreur (si c ce point que tu voulais remonter)
3°) je vois pas en quoi corriger une erreur est une honte ....
Marsh Posté le 27-06-2006 à 17:06:05
Citation : Enfin, la requête donnée par alien_nan ne réponds pas à la question puisqu'elle ne remonte que le 'count', count qui est également faux puisque s'il n'y a pas d'enregistrement qui vérifie la jointure elle remonte tout de même 1. |
euh...select count(1) from matable ne remonte pas 1, hein
Marsh Posté le 27-06-2006 à 17:16:35
alien_nan a écrit : |
C'est pas une honte, c'est juste que je passe pour un taré à dire que ton truc est faux alors que le nouveau que tu as mis est juste
alien_nan a écrit : euh...select count(1) from matable ne remonte pas 1, hein |
Dans ton exemple, le problème que je soulignais était le suivant:
Table A:
id |
Table B:
|
ta requête était:
Code :
|
Le count remonterait 1 pour chacun des enregistrements de la table A, alors qu'il n'y a pas d'enregistrement pour l'id 3
1 |
Par ailleurs, si tu as 2 enregistrements avec id = 1, ton count remonte 2 fois 1 au lieu de 1 fois 2
Marsh Posté le 27-06-2006 à 17:21:30
on est d'accord (et on ne t'a pas pris pour un taré, j'avais de toute facon faux sur le mode de jointure, et je crois que c'est toujours le cas)
Marsh Posté le 27-06-2006 à 16:26:00
Je voudrais faire une jointure avec un count
Je m'explique
J'ai une table avec une liste de groupe différent (donc id unique)
Dans cette table 'groups', on a 'group_id' (unique) et 'group_name'
Dans une autre table a a des droits, il peut y avoir plusieurs ou aucun droit rataché à un groupe
Dans cette table 'aacls', on a notamment champs 'aacl_group_id'
Je voudrais en une seule requete avoir ma liste de groupe (la clause where ci dessous la concernant est correct) et le nombre de droits qu'il lui sont lié
J'ai essayé un ça :
Mais j'ai cette erreur :
comment faire ?