2017-01-12 8 views
1

Als ich meine vorherige Frage über eine Funktion behoben habe, stecke ich in meiner Abfrage fest.Abfragedatum funktioniert nicht richtig

SELECT * FROM threads WHERE cat_id = :cat_id AND thread_date=(
    SELECT max(thread_date) FROM threads 

Wenn die Spalte in der Datenbank die gleiche thread_date wie in einer anderen Spalte hat, druckt er die erste thread_name aus, statt nur beide.

Ich möchte beide thread_name aus einer cat_id wie oben beschrieben drucken.

Example data: id = 1, cat_id = 15, thread_name = test, thread_date = 15; 
       id = 2, cat_id = 16, thread_name = test2, thread_date = 15; 

Ergebnis:

test test 

Was ich erwarte:

test 
test2 

Dank

http://image.prntscr.com/image/1c44540d40fa413f8bd073bc481858b9.png

+2

Was soll die Abfrage tun? Probendaten und gewünschte Ergebnisse würden helfen, sowie eine Erklärung. –

+0

Warum filtern Sie nach 'cat_id', wenn 'id = 2' in der Ergebnismenge sein soll? –

+0

Es muss der thread_name einer cat_id des höchsten thread_date gedruckt werden – user6632515

Antwort

0

Verschiebung der Teil der WHERE Klausel re stricting die cat_id zu der Unterabfrage:

SELECT * 
FROM threads 
WHERE thread_date = (SELECT MAX(thread_date) FROM threads WHERE cat_id = :cat_id) 

Die Unterabfrage nun die maximale thread_date für die Eingabe cat_id und die äußere Abfrage alle Datensätze identifizieren teilen diese maximale thread_date zurückkehren wird.

+0

Es druckt immer noch den thread_name einer anderen cat_id, wenn es das gleiche thread_date – user6632515

+0

hat Möglicherweise haben Sie ein Problem mit Ihren Daten, meine Abfrage sollte Ihr Problem lösen. –

+0

Nein, habe ich nicht. Wenn eine Spalte dasselbe thread_date hat, wird nur der erste thread_name doppelt ausgegeben. – user6632515