Mailinglisten-Archive |
Thomas Heller schrieb am Samstag, den 2. Oktober 1999: > Ich habe hier ein kleines Problem mit einer Abfrage. Ich will mit > dieser Abfrage erreichen, daß das Höchstgebot (bei meiner > InternetAuktion) die passende UserID und die Anzahl der Gebote > anzeigt die insgesamt vorliegen. [...] > Mit der Abfrage: "SELECT UserID, MAX(Bid) AS maxbid, COUNT(Bid) AS > counter FROM Bids WHERE LotID=1 AND Bid=maxbid GROUP BY LotID ORDER > BY Bid;", bekomme ich nur einer Fehlermeldung das maxbid ein unknown > column ist ... stimmt ja auch irgendwie =) > > Ich verzeifel hier langsam. Kann mir jemand sagen wie ich das alles > in einer Abfrage unterbringen kann? > Mit 2 Abfragen ist es schon gelöst obwohl mir das nicht so ganz top > vorkommt. > > "SELECT COUNT(*), MAX(Bid) FROM Bids WHERE LotID=1" > "SELECT UserID FROM Bids WHERE LotID=1 ORDER BY Bid DESC LIMIT 1" Das ist genau das Thema des Kapitels "8.3.4 The rows holding the group-wise maximum of a certain field" im MySQL-Handbuch, welches zufälligerweise von mir stammt ... ;-) Inzwischen kenne ich noch eine Alternative zum MAX-CONCAT-Trick mit Hilfe von LEFT-JOINs: SELECT b.UserID, b.Bid AS maxbid, COUNT(*) AS counter FROM Bids AS b LEFT JOIN Bids AS b2 ON b.LotID = b2.LotID AND b.Bid < b2.Bid LEFT JOIN Bids AS b3 ON b.LotID = b3.LotID WHERE ISNULL(b2.Bid) Der LEFT-JOIN mit b2 zusammen mit WHERE ISNULL(b2.Bid) filtert erstmal pro LotID die Zeile mit maximaler Bid heraus, und zum Zählen wird das dann nochmal mit b3 verbunden (das müßte dann eigentlich kein LEFT JOIN mehr sein - schadet aber auch nicht - , aber seltsamerweise ist das im Test mit LEFT JOIN viel schneller als mit einem normalen Join). Ciao, Martin -- Martin Ramsch <m.ramsch_(at)_computer.org> <URL: http://home.pages.de/~ramsch/ > PGP KeyID=0xE8EF4F75 FiPr=5244 5EF3 B0B1 3826 E4EC 8058 7B31 3AD7 --- *** Abmelden von dieser Mailingliste funktioniert per E-Mail *** an mysql-de-request_(at)_lists.4t2.com mit Betreff/Subject: unsubscribe
php::bar PHP Wiki - Listenarchive