Ich habe eine Abfrage wie diese (Mysql 5.x, PHP - für Lesbarkeit formatiert)GROUP BY, ORDER BY - Wie Gruppe Artikel von betrachten neueste Apperance machen
$query ="
SELECT
p.p_pid,
p.p_name,
p.p_url
FROM
activity a,
products p
WHERE
a.a_uid= ".$uid_int."
AND a.a_pid > 0
AND p.p_pid = a.a_pid
GROUP BY
a.a_pid
ORDER BY
a.a_time DESC LIMIT 6
");
Im Allgemeinen ist es ein produzieren sollte einzigartige Liste der 6 neuesten Produkte, die der Benutzer gesehen hat.
Das Problem ist, wenn der Benutzer ein Produkt mehr als einmal gesehen hat. Einer von ihnen in den letzten 6 Aktivitäten und einer von ihnen vor den letzten 6 Aktivitäten liefert die Abfrage das Produkt nicht zurück. Ich nehme an, dass die (Gruppe von) a_time nicht mit dem spätesten Zeitpunkt des Erscheinens des Produktes verlässt. Wie kann ich das korrigieren?
Dank !. Warum brauche ich MAX auf p_name etc ..? Das sind Strings. – Nir
Ich habe das auch zuerst geschrieben, aber eine Gruppe von a.a_pid ist wirklich eine Gruppe auf p. So scheint es, dass er nach Produkt gruppieren möchte und die letzten 6 Produkte mit Aktivität findet. – Andomar
@Nir: Dies sind * nicht * Zeichenketten. Dies sind * Gruppen von * Strings, gruppiert nach a.a_pid. Aus diesem Grund müssen Sie eine Aggregationsfunktion verwenden, um eine Zeichenfolge der Gruppe auszuwählen. Auch wenn MySQL hier etwas Schlamperei erlaubt und es sogar bequem erscheinen mag - das Problem wurde nicht durch eine Aggregationsfunktion verursacht, wo es angebracht war. – Tomalak