Autor | Zpráva | ||
---|---|---|---|
reckoname Profil |
#1 · Zasláno: 12. 4. 2010, 11:54:24
Zdravím,
prosím vás zkušené o radu při vyřešení následujícího dotazu. Zabýval jsem se s tím několik hodin a nedosáhl jsem výsledků. Mám dvě tabulky "user" a "visitor" tabulka "user" username | ip | datum -------------------------------------------- admin1 | 127.0.0.1 | 2010-04-01 -------------------------------------------- admin2 | 127.0.0.2 | 2010-04-01 -------------------------------------------- admin3 | 127.0.0.1 | 2010-04-02 tabulka "visitor" (obsahuje pouze buňku ip) ip | ------------ 127.0.0.1 ------------ 127.0.0.2 ------------ 127.0.0.3 Potřebuji získat s tabulky "user" řádky "admin2, admin3", protože se u těchto záznamů shodují IP adresy s tabulkou "visitor". Je-li v tabulce "user" více shodných IP adres, chci vypsat pouze jeden záznam a to ten s vyšším datem. SELECT username, MAX(datum) FROM user,visiror WHERE user.ip=visitor.ip GROUP BY ip; = toto mi bohužel nevypíše záznamy s nejvyším datumem. Děkuji |
||
Taps Profil |
#2 · Zasláno: 12. 4. 2010, 12:04:24 · Upravil/a: Taps
reckoname:
zkus SELECT u.username as uzivatele, MAX(u.datum) as date FROM user as u,visiror as v WHERE u.ip=v.ip GROUP BY u.ip order by u.datum DESC |
||
Kajman_ Profil * |
#3 · Zasláno: 12. 4. 2010, 12:10:22
Order by nepomůže, mrkněte na řešení do faq (pro každou kategorii najdi všechny řádky, kde je nejvyšší cena pro danou kategorii)
|
||
reckoname Profil |
#4 · Zasláno: 12. 4. 2010, 12:16:29 · Upravil/a: reckoname
Taps: toto jsem už taky zkoušel a order by to nevyřeší. Tváří se to tak, že se vypíše první u.username a MAX(u.datum) není brán v potaz. Vynechám-li u.username, zdá se to OK.
Kajman_: vyzkouším odpoledne. Díky. |
||
reckoname Profil |
#5 · Zasláno: 12. 4. 2010, 19:43:47 · Upravil/a: reckoname
Tak jsem to zkusil ale jedná se v tom příkladu o trochu odlišný příklad.
select t1.* from tabulka t1, (select max(t2.cena) cena from tabulka t2) t3 where t1.cena = t3.cena; Max. cenu určujeme v t2, my ji ale potřebujeme určit v t1 a to položku datum. |
||
Kajman_ Profil * |
#6 · Zasláno: 12. 4. 2010, 20:23:58
Koukal jste na špatný příklad. Inspiraci je nutno hledat v příkladu pro každou kategorii najdi všechny řádky, kde je nejvyšší cena pro danou kategorii.
První zakomentovaný řádek přidá tu vazbu na druhou tabulku. Poslední řádek vybere náhodně jeden řádek, pokud si nechcete vypsat případně více řádků pro jednu ip, když je maximum vícekráte. select t1.* from `user` t1, (select t2.ip, max(t2.datum) datumfrom `user` t2 group by t2.ip) t3 -- join `visitor` v on t3.ip=v.ip where t1.ip=t3.ip and t1.datum=t3.datum -- group by t1.ip |
||
Časová prodleva: 14 let
|
0