Autor Zpráva
neználek_
Profil *
Ahoj,
v tabulce jabka je sloupec kusů, druh

a chci z něj vypsat všechny jabka, jedno jakej druh, ale aby se mi řadily tak, že:

u jednoho kusu bude jen jeden záznam + (např. množina A)
u 2 až 3 kusů vyjedou striktně 4 záznamy + (např. množina B)
u 4 až 6 kusů vyjedou striktně 4 záznamy + (např. množina C)
u 7 až 8 kusů vyjedou striktně 3 záznamy (např. množina D)

Výsledek by vypadal zhruba tak:

kusy | druh |
1 neco
2 neco
2 neco
3 neco
3 neco atd.

Je jedno, jestli bude v každé množině všechno stejný, nebo dvě dvojky a dvě trojky, nebo jedna dvojka a tři trojky (mluvím ted o množině B) protože to dopředu nevím, kolik je dvoje, trojek atd.

Jak pak na to? :(
neználek_
Profil *
celkem by tedy měl sql dotaz vyplivnout 12 záznamů
nightfish
Profil
zkus to ještě jednou - nějak nechápu, co jsou ty množiny A, B, C, D
a taky které striktně záznamy chceš vypisovat, a jaká jsou data v té tabulce (konkrétně) a jaký má být výstup (opět konkrétně, ne nějaké "neco neco neco neco")
neználek_
Profil *
dobře od začátku, tvořím tabulku jabka (id, ks, druh)

id je auto_increment
ks je náhodný mt_rand(1, 12);
druh úplně nějaký blabla text, který je však jedninečný, neopakuje se v žádném jiném řádku tabulky

nalil jsem tak do tabulky jabka řekněme 1000 záznamů

ted chci na web vypsat sql dotazem následující:

aby v prvním řádku výpisu - byl určitě druh jabka, který má jen 1 ks (těch jednokusových druhů je v tabulce jabka víc, náhodně se vybral jeden, který zvítězil :) )

na druhém až pátém řádku - náhodně druhy jablek, které mají ne více než 4 kusy a ne méně než 2 kusy ($ks>=2 && $ks<4)

na šestém až devátém řádku - náhodně druhy jablek, které mají ne více než 7 kusů a ne méně než 4 kusů ($ks>=4 && $ks<7)
neználek_
Profil *
výsledek bude vypadat třeba tak:

ks | druh
-----------
1   | blablatext
3   | ggdfdfdfgdfggf
2   | fsfsdrgdfgdf
3   | fsdfferdff
2   | weqweqw
4   | ddsddas
4   | sdwe
5   | dadwed
6   | fsgtrgf

es
Profil *
Dá sa to pomocou troch dotazov zlúčených pomocou UNION.
neználek_
Profil *
Jeden dotaz bude na ten jeden kus, druhej 2-3 kusy a třetí na 4 - 6 kusů?
nightfish
Profil
zhruba takhle nějak
(select ks, druh from tabulka where ks = 1 order by rand() limit 1) UNION (select ks, druh from tabulka where ks >= 2 and ks < 4 order by rand() limit 4) UNION (select kc, druh from tabulka where ks >= 4 and ks < 7 order by rand() limit 4) unio n(select kc, druh from tabulka where ks >= 7 and ks <= 8 order by rand() limit 3)
neználek_
Profil *
to je masakr, díky moc. Jsem zvědavej jak to bude rychlý ve větším množství. Vyzkouším.
nightfish
Profil
Jsem zvědavej jak to bude rychlý ve větším množství
obávám se, že moc ne, ale lepší varianta mě nenapadá
neználek_
Profil *
Jabka byly samozřejmě jenom ukázkově, Rand to zpomaloval, tak jsem ho vynechal a řadil podle jinýho klíče. Ted je z toho asi pětiřádkovej sql, protože jsem tam měl ještě výběr z další tabulky pro každej UNION, ale fakt to funguje, díky. :-)
Toto téma je uzamčeno. Odpověď nelze zaslat.

0