Autor Zpráva
zero0x
Profil
takze majme tabulku napriklad spoluziaci. nech tam budu polia popularita, a vek.

chcem vybrat 5 najpopularnejsich ziakov, avsak vystup chcem zoradit podla veku. teda chcem podla veku zoradenych 5 najpopularnejsich ziakov.

skusal som subrequest, nieco ako select (select meno, vek, popularita from spoluziaci order by popularita limit 5) order by vek, lenze to skoncilo chybou.

neviete, ako by sa to dalo urobit?
Taps
Profil
zkus to takto
$sql=mysql_query("select meno,vek,popularita from spoluziaci order by popularita DESC limit 5");
Kajman_
Profil *
select * from (select meno, vek, popularita from spoluziaci order by popularita limit 5) tmp order by vek
zero0x
Profil
Taps: to je blbost, on by ho zoradi podla popularity, ale co dalej?

Kajman_: to vyzera dobre, ale naco je tam slovo tmp ?

btw toto funguje:

select * from (select meno, vek, popularita from spoluziaci order by popularita limit 5) as spoluziaci order by vek

edit: uz chapem to tmp, to si chcel dat as tmp, vsak?
MzM
Profil
..as tmp nebo jenom tmp, to as tam být nemusí.
nešlo by to jednodušeji tak, že to seřadíš podle dvou sloupečků?

select meno, vek, popularita
from spoluziaci
order by popularita asc, vek desc -- nebo jak to potrebujes
limit 5

ne že by ty předchozí byly špatně, ale myslím, že je to zbytečně matoucí
tiso
Profil
MzM - nešlo, nedosiahneš to čo chce, iba v 2 špeciálnych prípadoch: popularita (prvé triediace kritérium) by bola rovnaká, alebo by zoradenie podľa popularity zodpovedalo zoradeniu podľa veku...
zero0x
Profil
tiso: kym som pisal prispevok, tak si ma predbehol

takto to nefunguje, pretoze ja chcem nieco ine..

to co si napisal urobi asi to, ze zoradi podla popularity, a ak maju nahodou niektori dvaja rovnaku popularitu, tak zoradi podla veku.

ibaze ja chcem 5 najpopularnejsich ziakov, a tych chcem zoradit podla veku..

prikladam vypis

mysql> select * from ziaci; --iba vypis

+------+------------+
| vek | popularita |
+------+------------+
| 1 | 50 |
| 2 | 100 |
| 3 | 75 |
| 4 | 1 |
| 5 | 2 |
| 6 | 16 |
| 7 | 4 |
+------+------------+
7 rows in set (0.02 sec)

mysql> select * from ziaci order by popularita desc; --zoradit podla popularity
+------+------------+
| vek | popularita |
+------+------------+
| 2 | 100 |
| 3 | 75 |
| 1 | 50 |
| 6 | 16 |
| 7 | 4 |
| 5 | 2 |
| 4 | 1 |
+------+------------+
7 rows in set (0.00 sec)

mysql> select * from ziaci order by popularita desc limit 3; --troch najpopularnejsich
+------+------------+
| vek | popularita |
+------+------------+
| 2 | 100 |
| 3 | 75 |
| 1 | 50 |
+------+------------+
3 rows in set (0.00 sec)

mysql> select * from ziaci order by popularita desc, vek desc limit 3; -- a tu je ten tvoj postup. vidis, ze to takto nejde, pretoze nie su zoradeni podla veku
+------+------------+
| vek | popularita |
+------+------------+
| 2 | 100 |
| 3 | 75 |
| 1 | 50 |
+------+------------+
3 rows in set (0.00 sec)


inac tento priklad zo ziakmi je cisto fiktivny, v skutocnosti riesim nieco ine :) ale na demonstraciu problemu je to dobre..


kazdopadne som sa naucil nieco o subqueries, asi to, ze ked subquery vracia jeden stlpec, tak sa odpoved sprava ako stlpec, teda ju mozeme jednoducho selectnut, a ak subquery vracia viacej stlpcov, tak sa to uz sprava ako tabulka. zaujimave :)
MzM
Profil
jo takhle, tak to je asi to select ... from (select .... order, limit) order dobré řešení...
Toto téma je uzamčeno. Odpověď nelze zaslat.

0