Autor Zpráva
lopikol
Profil
Pro znázornění jsem vytvořil jednoduchou tabulku.
http://pastebin.com/tFPkcf26

Potřebuji si výpis groupnou před samotným výpisem, jelikož mě vůbec nezajímá text, ale jde mi jen o jméno (resp. id uživatele) a datum.
Zda narážim na problém, jelikož to grupuje od nejstarších záznamů a tim pádem je datum zkreslený.

V případě, že máme tento dotaz:
SELECT *
FROM text T
LEFT JOIN user U
ON U.id = T.user_id
Výsledkem je:
id    user_id        date           some             id    name
----------------------------------------------------------------
1    1    2011-08-10 11:16:51    text od 1 číslo 1    1    aaaa
2    1    2012-07-11 11:16:57    text od 1 číslo 2    1    aaaa
3    2    2011-07-15 11:17:01    text od 2 číslo 1    2    bbbb
4    3    2010-05-02 11:17:05    text od 3 číslo 1    3    cccc
5    3    2012-07-10 11:17:08    text od 3 číslo 2    3    cccc

Jakmile to grupnu podle id uživatele:
SELECT *
FROM text T
LEFT JOIN user U
ON U.id = T.user_id
GROUP BY T.user_id
Výsledkem je toto se skresleným datumem (vždy to nejstarší datum v db).
id    user_id        date           some             id    name
----------------------------------------------------------------
1    1    2011-08-10 11:16:51    text od 1 číslo 1    1    aaaa
3    2    2011-07-15 11:17:01    text od 2 číslo 1    2    bbbb
4    3    2010-05-02 11:17:05    text od 3 číslo 1    3    cccc

Jde mi o to, jak udělat, aby se začlo grupovat od druhé strany. Tedy v poli date byl nejnovější datum, né ten nejstarší.
Jak na to?

Děkuji.
LaMMa
Profil
skús pridať ORDER BY date so spravnym prefixom U./T.
lopikol
Profil
LaMMa: Ale to mi seřadí už ty zgrupované, ale já je potřebuji seřadit ještě před tím.
LaMMa
Profil
tak potom sa skus inspirovat tymto:
SELECT `p`.*, `pp`.`price` FROM `products` `p` 
LEFT JOIN (
    SELECT `price` FROM `product_price` ORDER BY `date_updated` DESC
) `pp` 
ON `p`.`product_id` = `pp`.`product_id`
GROUP BY `p`.`product_id`;
lopikol
Profil
LaMMa:
A to je prověřené? Funguje to?
Zkoušel jsem už několik kombinací a nikdy to ten LeftJoin nevezme v potaz.
Kajman
Profil
lopikol:
Najděte si pro každého uživatele hledané maximum, viz. faq.

Podle id by to mohlo být i jeddnodušší...

SELECT T.*,
       U.*
FROM   (SELECT Max(TM.id) id
        FROM   `text` TM
        GROUP  BY TM.user_id) M
       JOIN `text` T
         ON M.id = T.id
       LEFT JOIN user U
              ON U.id = T.user_id
DJ Miky
Profil
Jestli jde jen o dvojice ID uživatele -- čas posledního textu, nestačilo by použít MAX()?
SELECT t.user_id, MAX(t.date), u.*
FROM text t
LEFT JOIN user u ON (t.user_id = u.id)
GROUP BY t.user_id
lopikol
Profil
Kajman:
Prosimtě, koukni na ten dotaz ještě jednou. Přeci nemůžeš grupovat dřív, než provedeš Join té tabulky ;)


DJ Miky:
Zkusil jsem to a vypadá, že to funguje v pohodě. ;)

Kajman:
Díky za odkaz na FAQ. MIN() a MAX() mi dost pomůžou ;)
Kajman
Profil
lopikol:
Přeci nemůžeš grupovat dřív, než provedeš Join té tabulky

Směle můžu joinout výsledek zgroupovaných dat.

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