Categories

Links

License

Creative Commons License

Unless otherwise expressly stated, all original material of whatever nature created by and included in this weblog is licensed under a Creative Commons License.

Bug in MySQL 4.1.10a?, 01.04.2005 22:01

Bisher wurden die Einträge der Indexseite mit diesem SQL-Statement abgefragt:

SELECT w.*, a.nick AS nick, cat.name AS categoryname, 
count(c.id) AS comments, 
l.name AS languagename, l.code AS lc 
FROM `x-log_weblog` AS w, `x-log_authors` AS a, 
`x-log_languages` AS l, `x-log_categories` AS cat 
LEFT JOIN `x-log_comments` AS c ON w.id = c.posting 
WHERE a.id = w.author 
AND cat.id = w.category 
AND w.date <= NOW() 
AND w.public = '1' 
AND w.language & l.id > 0 
GROUP BY w.id 
ORDER BY w.date DESC

Doch seit Hostpoint auf MySQL 4.1.10a umgestellt hat, stimmt die Anzahl der Kommentare nicht mehr.

Nach diversen erfolglosen Versuchen die LEFT JOIN Anweisung zu ändern, habe ich in einem Bugreport eine Lösung gefunden:

count(DISTINCT c.id)

Mangels spezifischer Kenntnisse kann ich nicht beurteilen ob das nun ein Bug oder ein Feature ist. Aber da mehrere Bugreports dazu existieren scheint es eher ein Bug zu sein.

comments

  • andreas - 04.04.2005 11:09
  • Könnte es sein, dass du damit eine 1:n-Relation provozierst, so dass im Resultset gewisse Kommentare mehrfach auftauchen würden? Wenn dem so ist, ist das kein Bug sondern erwartetes Verhalten, das mit DISTINCT "behoben" werden muss.
  • x-way - 04.04.2005 12:09
  • x-way
  • Ja richtig, ich habe eine (gewollte) 1:n Relation zwischen x-log_weblog und x-log_comments. Dann sollten aber nur die Einträge mehrfach auftauchen und nicht die Kommentare insofern wäre das DISTINCT nicht nötig.
    Jedoch habe ich noch die 1:n Relation zwischen x-log_weblog und x-log_languages übersehen, welche die Einträge (und damit auch die Kommentare) mehrfach auftauchen lässt und damit das DISTINCT nötig macht.
    Das heisst, mein bisheriges SQL-Statement nutzte einen Bug in MySQL < 4.1.10a !?
  • andreas - 05.04.2005 10:18
  • Muss nicht ein Bug sein. Kann sein, dass es bisher eine nicht 100% SQL-konforme Interpretation von MySQL war. Es gibt bei Versionssprüngen immer ein paar Sachen, die bislang "falsch" funktioniert haben (oder gar nicht) und später nur noch "richtig". Das Changelog gibt meistens Aufschluss darüber, ab und zu allerdings auch nicht ;)

blog comments powered by Disqus