Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
GROUB BY und ORDER BY-Problem [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
GROUB BY und ORDER BY-Problem


 
TriphunEM
12-07-2010, 14:53 
 
Hallo,

ich hab jetzt sehr lange nach eine Lösung gesucht, aber noch keine gefunden!

Es handelt sich um das bekannte MySQL-Problem das eine ORDER BY in Verbindung mit einem GROUB BY nicht funktioniert!

Meine Abfrage:

SELECT a.contentId,a.contentTitle,b.feedTitle FROM feedContents AS a JOIN feeds AS b
ON a.feedId=b.feedId WHERE b.isActive=1 GROUP BY a.feedId ORDER BY a.lastModified DESC LIMIT 10


Ich will erreichen das pro Feed immer nur der neuste Inhalt ausgegen werden soll. Leider gibt die Abfrage scheinbar den ältesten zurück!

Hat jemand eine Idee wie ich das anders umsetzen kann? Ein Subselect, was ich noch nicht probiert habe, will ich eher nicht verwenden, da ich mit sehr großen Datenmengen arbeite!

Danke

 
wahsaga
12-07-2010, 14:59 
 
Es handelt sich um das bekannte MySQL-Problem das eine ORDER BY in Verbindung mit einem GROUB BY nicht funktioniert!
Das ist Quatsch.

Meine Abfrage:

SELECT a.contentId,a.contentTitle,b.feedTitle FROM feedContents AS a JOIN feeds AS b
ON a.feedId=b.feedId WHERE b.isActive=1 GROUP BY a.feedId ORDER BY a.lastModified DESC LIMIT 10

Das ist eine Verletzung des SQL-Standards, deinerseits - du darfst an dieser Stelle nur Spalten selektieren, die sich auch innerhalb der Gruppierung befinden.

Dass MySQL das im fehlertoleranten Modus durchgehen lässt, ändert nichts daran, dass du hier fehlerhaft vorgehst.

Ich will erreichen das pro Feed immer nur der neuste Inhalt ausgegen werden soll. Leider gibt die Abfrage scheinbar den ältesten zurück!
Dafür ist der Ansatz selbstverständlich untauglich.
MySQL dokumentiert deutlich, dass du in so einem Fall Daten aus irgendeinem der Datensätze zurück bekommst - nicht aus dem „ersten“, nicht aus dem „letzten“, sondern aus irgendeinem.

Ein Subselect, was ich noch nicht probiert habe, will ich eher nicht verwenden, da ich mit sehr großen Datenmengen arbeite!
Entweder Subselect, oder ggf. auch ein SELF JOIN.

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:53 Uhr.