Autor Zpráva
Jan Tvrdík
Profil
Mám následující tabulku:
+-------+---------+-------+
| kdo   | co      | kolik |
+-------+---------+-------+
| Karel | hrušky  |    23 |
| Karel | jablka  |    65 |
| Pepa  | hrušky  |    78 |
| Pepa  | jablka  |    15 |
+-------+---------+-------+


Jak jedním dotazem zjistím, kdo nasbíral nejvíc hrušek a kdo nejvíc jablek?
Pesulap
Profil
SELECT * FROM nazev_tabulky WHERE co="hrusky" ORDER BY kolik DESC

SELECT * FROM nazev_tabulky WHERE co="jablka" ORDER BY kolik DESC
Jan Tvrdík
Profil
Pesulap
Díky za radu, ale myslel jsem jedním dotazem (doplněno do úvodního postu).
japlavaren
Profil
$q="SELECT kdo FROM tabulka WHERE co='hrusky' ORDER BY kolik DESC LIMIT 1 UNION ALL
SELECT kdo FROM tabulka WHERE co='jablka' ORDER BY kolik DESC LIMIT 1";
$mq=mysql_query($q);

list($hrusky)=mysql_fetch_row($mq);
list($jablka)=mysql_fetch_row($mq);


a mas to na jeden dotaz :)
Jan Tvrdík
Profil
japlavaren
Myslel jsem nějakou normální metodou :), ale podle toho, co zde vidím to asi nejde.
DoubleThink
Profil *
Šlo by něco ve smyslu:
SELECT * FROM tabulka GROUP BY co ORDER BY kolik DESC
Pak stačí vytáhnout první dva řádky.
Kajman_
Profil *
Nebo něco na způsob
select * from tabulka where (co,kolik) in (select co, max(kolik) from tabulka group by co)
japlavaren
Profil
Jan Tvrdík - to je normalna metoda na jeden dotaz..
Kajman_
Profil *
japlavaren
Pravda používá se to. Tipnul, bych že je ty selecty nutné zazávorkovat, jinak se poslední limit stáhne na všechen union. Nepříjemné je, když jsou dva stejně čilí zběrači, pak tam je jen jeden (což ale ze zadání není jasné, jak se má zachovat). Další možnou nepříjemností je nárust druhů ovoce.
Jan Tvrdík
Profil
DoubleThink
SELECT * FROM tabulka GROUP BY co ORDER BY kolik DESC
Tak vypadala moje první idea. Bohužel nefunguje. MySQL se bohužel chová dost nelogicky.

Kajman_
Nebo něco na způsob
select * from tabulka where (co,kolik) in (select co, max(kolik) from tabulka group by co)
Blahopřeji a děkuji. Tohle je to co jsem hledat.
Toto téma je uzamčeno. Odpověď nelze zaslat.