Autor Zpráva
Icka
Profil *
Ahoj, posledně jste mě tu tak pěkně poradili, tak zkusím zas:

Potřeboval bych seřadit data z MySql tak, že bych potřeboval podle priorit:

A) pokud jsou nepřečtené zprávy tak priorita první
B) dále pak podle stavu uživatele (1, 2, 3, 4 ...)

no a v obou případech abecedně.

Mám přitom

T1: id | jmeno | stav (uzivatele)
T2: id | uzivatel | zprava | precteno (zprávy)


Tady mám současnej select:

SELECT u.id, u.jmeno, u.stav,
(
SELECT COUNT(id)
FROM hh_messages
WHERE od = u.id AND komu = $komu AND precteno = 0
) AS nove
FROM t_users AS u
LEFT JOIN t_messages AS m ON m.od = u.id
WHERE
(
u.privilegia = 1
AND u.id != $komu
)
OR
(
m.komu = $komu
)
GROUP BY u.id
ORDER BY ....
Joker
Profil
ORDER BY (nove > 0) DESC, u.stav, u.jmeno?
Icka
Profil *
hm, tak to bylo jednodušší než jsem si myslel.. Nevim co sem v tom hledal. Děkuji mnohokrát..
Ještě bych se zeptal, vy případě že tedy jsou nové zprávy (nove > 0) jde v tomto případě seřadit data ne podle jména jako obvykle, ale podle T2.vlozeno ? Jde o časovej údaj vložení zprávy.
Nedaří se mi to tam nikam napasovat :(
juriad
Profil
ORDER BY (nove > 0), IF(nove > 0, vlozeno, stav), jmeno
Ale nejsem si jistý, protože dokumentace se zmiňuje jen o číslech a řetězcích.
Icka
Profil *
jj přidal jsem do selectu

SELECT MAX(vlozeno) 
 FROM hh_messages 
 WHERE od = u.id AND komu = $komu AND precteno = 0 
 ) AS posledni 

a pak jsem použil zmíněnou podmínku IF(nove>0,posledni,stav) DESC

a zdá se že funguje jak má ;-)
Děkuji..

Jen se ještě zeptám...
mám teď totiž:

SELECT id, jmeno, ....
(SUBSELECT 1 FROM zpravy) as nove,
(SUBSELECT 2 FROM zpravy) AS posledni
FROM uzivatele
LEFT JOIN zpravy ..

jde mě o to, že mnohokrát připojuji tabulku se zprávama... Šlo by to nějako optimalizovat?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0