MySQL (count (DISTINCT.....JOIN OUTER LEFT....

Alles rund um die Systemverwaltung, die Administration und Konfiguration Eures Linuxsystems

Moderator: Moderatoren

Antworten
pingoman
Newbie
Newbie
Beiträge: 23
Registriert: 19. Jun 2004, 16:37

MySQL (count (DISTINCT.....JOIN OUTER LEFT....

Beitrag von pingoman » 19. Jun 2004, 16:42

Hallo Zusammen,

ich habe nun hier im Forum eine Menge schon gelesen, heute habe ich mich dann dazu entschlossen mich hier anzumelden. Ich habe da auch eine Frage da ich mir derzeit den Kopf über ein Versions-Unterschied zerbreche ;(

Ich habe folgendes SQL-Statement, welche über 3 Tabellen etwas zählen soll. Mit MYSQL in der Version > 4 kein Problem. In der MYSQL-Version < 4 bekomme ich immer in den COUNTS eine 1 zurückgeliefert sofern für COUNT keine Ergebnisse vorliegen. In der Version > 4 klappt es, liegen keine Ergebnisse für die COUNTS vor, so erhalte ich jeweils eine 0.

Hier das SQL:

Code: Alles auswählen

SELECT a.id, a.lname, a.owner, a.groups, 
COUNT( DISTINCT b.id ) AS count, 
COUNT( DISTINCT d.id ) AS count2 

FROM tbl_ag_lists AS a 

LEFT OUTER JOIN tbl_ag_lists_groups AS b ON ( a.id = b.lid ) 
LEFT OUTER JOIN tbl_ag_lists_msg AS d ON ( b.id = d.gid ) 

GROUP BY id
Pingoman[/code]

Werbung:
Benutzeravatar
Okami
Member
Member
Beiträge: 78
Registriert: 28. Mai 2004, 12:58
Wohnort: BASF City

Beitrag von Okami » 8. Jul 2004, 13:19

Hast du's mal mit der guten alten where-Variante für Joins probiert?

Code: Alles auswählen

SELECT tbl_ag_lists.id, tbl_ag_lists.lname, tbl_ag_lists.owner, tbl_ag_lists.groups, COUNT(tbl_ag_lists_groups.id), COUNT(tbl_ag_lists_msg.id) 
FROM tbl_ag_lists, tbl_ag_lists_groups, tbl_ag_lists_msg 
WHERE tbl_ag_lists.id = tbl_ag_lists_groups.id AND tbl_ag_lists_groups.id = tbl_ag_lists_msg.id
GROUP BY tbl_ag_lists.id, tbl_ag_lists.lname, tbl_ag_lists.owner, tbl_ag_lists.groups;
(Ich hab' jetzt einfach alle id-Attribute als id und nicht als gid usw. genommen.)
PC: AMD Athlon64 3700+, 1024 MB DDR-RAM PC-400, SuSE 10.0
Notebook: Acer Travelmate 800, Centrino 1300 MHz, 512 MB DDR, SuSE 9.3 Pro

pingoman
Newbie
Newbie
Beiträge: 23
Registriert: 19. Jun 2004, 16:37

Beitrag von pingoman » 8. Jul 2004, 19:51

hi,

nein habe ich noch nicht probiert. werde ich heute oder morgen mal ausprobieren. ich habe mir zwar nun ein workarround gebaut, allerdings ist dies nicht dass wahre vom ei; ich versuche immer 100% anstatt irgendeine bastelei.

ok, danke für deine antwort...werde ich mir auf alle fälle ansehen und dass ergebniss dann hier auch nochmals posten.

pingoman

pprian
Newbie
Newbie
Beiträge: 11
Registriert: 9. Mai 2004, 22:42
Wohnort: BaWü
Kontaktdaten:

Beitrag von pprian » 24. Aug 2004, 19:18

Bei deinem SQL stimmt glaub was nicht...

SELECT a.id, a.lname, a.owner, a.groups,
COUNT( DISTINCT b.id ) AS count,
COUNT( DISTINCT d.id ) AS count2
FROM tbl_ag_lists AS a
LEFT OUTER JOIN tbl_ag_lists_groups AS b ON ( a.id = b.lid )
LEFT OUTER JOIN tbl_ag_lists_msg AS d ON ( b.id = d.gid )
GROUP BY id

--> Du hast vergessen, in den Group by sämtliche Spalten aufzunehmen, die du hinter select stehen hast und die nicht gezählt oder summiert werden sollen.

Imho sollte folgendes SQL laufen: (nur der group by wurde erweitert)


SELECT a.id, a.lname, a.owner, a.groups,
COUNT( DISTINCT b.id ) AS count,
COUNT( DISTINCT d.id ) AS count2
FROM tbl_ag_lists AS a
LEFT OUTER JOIN tbl_ag_lists_groups AS b ON ( a.id = b.lid )
LEFT OUTER JOIN tbl_ag_lists_msg AS d ON ( b.id = d.gid )
GROUP BY a.id, a.lname, a.owner, a.groups

Hoffe das hilft, testen kann ich's ja nicht, da ich deine DB nicht hab!

pingoman
Newbie
Newbie
Beiträge: 23
Registriert: 19. Jun 2004, 16:37

Beitrag von pingoman » 24. Aug 2004, 21:30

Hallo pprian,

Danke für deine Nachricht. Heute werde ich keine Zeit mehr haben in das Projektgeschehen eingreifen zukönnen. Ich versuche es diese Woche auszuprobieren. Ich gebe dann hier nochmals Bescheid. (Ein Grund für ein Forum ;)

Pingoman

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste