• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

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

pingoman

Newbie
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:
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]
 

Okami

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

Code:
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.)
 
OP
P

pingoman

Newbie
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
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!
 
OP
P

pingoman

Newbie
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
 
Oben