Autor | Zpráva | ||
---|---|---|---|
lopikol Profil |
#1 · Zasláno: 10. 7. 2012, 11:38:49
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 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 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 |
#3 · Zasláno: 10. 7. 2012, 11:53:34
LaMMa: Ale to mi seřadí už ty zgrupované, ale já je potřebuji seřadit ještě před tím.
|
||
LaMMa Profil |
#4 · Zasláno: 10. 7. 2012, 11:54:39
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 |
#5 · Zasláno: 10. 7. 2012, 12:33:32
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 |
#7 · Zasláno: 10. 7. 2012, 12:50:06
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 |
#8 · Zasláno: 10. 7. 2012, 12:50:40 · Upravil/a: lopikol
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 ;) |
||
Časová prodleva: 3 dny
|
|||
Kajman Profil |
#9 · Zasláno: 13. 7. 2012, 09:59:16
lopikol:
„Přeci nemůžeš grupovat dřív, než provedeš Join té tabulky“ Směle můžu joinout výsledek zgroupovaných dat. |
||
Časová prodleva: 12 let
|
0