Autor | Zpráva | ||
---|---|---|---|
neználek_ Profil * |
#1 · Zasláno: 21. 8. 2008, 19:26:36
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 * |
#2 · Zasláno: 21. 8. 2008, 19:27:29
celkem by tedy měl sql dotaz vyplivnout 12 záznamů
|
||
nightfish Profil |
#3 · Zasláno: 21. 8. 2008, 19:33:15
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 * |
#4 · Zasláno: 21. 8. 2008, 19:54:17
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 * |
#5 · Zasláno: 21. 8. 2008, 19:58:28
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 * |
#6 · Zasláno: 21. 8. 2008, 20:08:10
Dá sa to pomocou troch dotazov zlúčených pomocou UNION.
|
||
neználek_ Profil * |
#7 · Zasláno: 21. 8. 2008, 20:10:01
Jeden dotaz bude na ten jeden kus, druhej 2-3 kusy a třetí na 4 - 6 kusů?
|
||
nightfish Profil |
#8 · Zasláno: 21. 8. 2008, 20:11:09
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 * |
#9 · Zasláno: 21. 8. 2008, 20:12:22
to je masakr, díky moc. Jsem zvědavej jak to bude rychlý ve větším množství. Vyzkouším.
|
||
nightfish Profil |
#10 · Zasláno: 21. 8. 2008, 20:14:22
„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 * |
#11 · Zasláno: 21. 8. 2008, 20:37:48
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. :-)
|
||
Časová prodleva: 16 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0