Autor Zpráva
reckoname
Profil
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
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 *
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
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
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 *
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

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: