Rouven: Mysql, join, count(), where...

Beitrag lesen

Hello,

SELECT track . * , COUNT( tm.track_id ) AS meta_count, pool_track . *
FROM track, pool_track
LEFT OUTER JOIN (

SELECT track_id
FROM track_meta
) AS tm ON ( tm.track_id = track.track_id )
WHERE track.make_user_id = 1
AND track.track_id = pool_track.track_id
AND pool_track.pool_id = 11
ORDER BY track.artist ASC
LIMIT 0 , 50

Du vermischst explizite (LEFT JOIN) und implizite (,) JOIN-Syntax. Dort ist zwischen MySQL 4 und 5.x eine Umstellung vorgenommen worden welche Abschnitte in welcher Reihenfolge ausgeführt werden, in deinem Fall erhält der LEFT JOIN den Vorzug, "track" ist zum Zeitpunkt der Auswertung der ON-Klausel noch nicht mit im Boot.  
Wenn du doch sowieso hinterher track.track\_id = pool\_track.track\_id vergleichst, nimm doch hierfür auch gleich einen passenden JOIN.  
  
Ich bin mir übrigens noch nicht sicher, dass du hinterher dein gewünschtes Ergebnis bekommst (von wegen mehrere Zeilen dank der JOINs), aber ich bin sicher du meldest dich dann mit einer GROUP BY-Frage nochmal :-P  
Wenn du den anwesenden DB-Spezialisten einen Gefallen tun willst, dann verlasse dich dabei NICHT auf MySQLs [GROUP BY hidden fields](http://dev.mysql.com/doc/refman/5.1/de/group-by-hidden-fields.html)-Feature.  
  
MfG  
Rouven  

-- 
\-------------------  
sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& ([SelfCode](http://selfspezial.atomic-eggs.com/scode/selfcode.php?encodieren))  
  
Let Bygones Be Bygones  --  Robert Pitscottie: "Chronicles of Scotland"