Frage

Ich versuche also tatsächlich zu erreichen, dass Filter die am meisten gewählten Geschichten filtern. Die Geschichten werden in einem Tisch gerettet und alle Stimmen in einem anderen.

Ich habe diese Aussage, um die Bestellung der VID -Spalte richtig zu erhalten:

SELECT vid, COUNT(id) AS votecnt 
  FROM votes 
WHERE status = 1 
GROUP BY vid 
ORDER BY votecnt DESC

Und dann muss ich die Geschichten selbst filtern, und ich möchte, dass die bestellt werden, wie sie in der ersten Klausel sind.

SELECT vid, body, timestamp 
  FROM stories 
WHERE lv = 1 
  AND status = 1

Die Sache ist, es ist die Reihenfolge, die ich brauche, denn die erste Aussage gibt nicht alle Zeilen zurück, die der zweite tut. Es wäre sogar noch besser, wenn die erste Abfrage die Tabelle zuerst nach Status = 1 zählte und dann insgesamt Stimmen.

Irgendwelche Ideen, wie man das all dies in eine SQL -Abfrage anschließt? Oder sollte ich dazwischen PHP verwenden?

War es hilfreich?

Lösung

Wenn ich Ihre Struktur nicht stark missverstand, sollte ein einfacher Join einwandfrei funktionieren:

SELECT stories.vid, body, timestamp, COUNT(votes.id) votecnt FROM stories
INNER JOIN votes ON stories.vid=votes.vid
WHERE stories.lv=1 AND stories.status=1
GROUP BY votes.vid
ORDER BY votecnt DESC

Ich bin mir nicht sicher, was du mit dem meinst

Es wäre sogar noch besser, wenn die erste Abfrage die Tabelle zuerst nach Status = 1 zählte und dann insgesamt Stimmen.

Da Ihre Where -Aussage nur Stimmen/Geschichten verwendet, die Status = 1 haben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit dba.stackexchange
scroll top