Групиране и подредба

metal_head

Registered
Здравейте! Преди известно време един потребител ми помогна да направя заявка, с която да изведа различните потребители, с които потребителя някога си е писал (като разговорите във Vbox и Facebook).

След това аз малко промених заявката, защото не ми се получаваше съвсем добър резултат и сега заявката ми е така:


[sql]SELECT message, sender, receiver, isread, timestamp, DISTINCT CASE WHEN sender = '$user_id' THEN receiver ELSE sender END AS user FROM pm WHERE sender='$user_id' OR receiver ='$user_id' GROUP BY user ORDER BY timestamp DESC[/sql]

Това, което искам да направя е да изведа най - новите резултати най - отгоре. Тоест потребителите, с които съм си писал последно или те са ми писали да са най - отгоре. Проблемът е, че въпреки че имам ORDER BY timestamp (което е времето на изпратеното съобщение), разговорите не се подреждат така, както трябва.

Не давам структурата на базата ми данни, защото предполагам че проблемът идва от самата заявка.
 
Принципно подреждането става с DESC или ASC (което е по подразбиране), така че ако ги смениш би трябвало и резултатите да се оправят.
 
Да, знам как става, но въпросът е, че не подрежда правилно. Мисля че самата подредба в момента става според timestamp-а на най - стария запис в групата, а на мен ми трябва да става според най - новия, за да може тези, които са ми писали най - скоро да са ми най - отгоре.


[EDIT]

Оправих се. Измислих го, но не съм сигурен дали не е малко тежко. Както и да е, ето решението ми:

[sql]SELECT *
FROM (

SELECT message, sender, receiver, isread, timestamp,
CASE WHEN sender = '1'
THEN receiver
ELSE sender
END AS user
FROM pm
WHERE sender = '1'
OR receiver = '1'
ORDER BY timestamp DESC
) AS msg
GROUP BY user ORDER BY timestamp DESC[/sql]
 

Back
Горе