Autor | Zpráva | ||
---|---|---|---|
matak Profil |
#1 · Zasláno: 5. 3. 2009, 13:38:32
Nevím jak lépe to napsat, ale představte si tabulku
id value 1 5 2 10 3 6 4 80 5 90 1 6 1 80 2 50 2 5 a potřebuji zjistit jednotlivá id jehož řádky ve value nabývají 5,6 např. tedy tady je např. jiné zobrazení 1 5 6 80 2 10 50 5 3 6 4 80 5 90 mojí podmínce vyhovuje jen id=1, má hodnoty 5 a 6 možná je to blbost ale z přetáhnutí to tam nevidím díky |
||
matak Profil |
#2 · Zasláno: 5. 3. 2009, 13:41:55
jediné na co jsem přišel je tohle, ale vůbec netuším jestli je to správně nebo se to dá dělat lépe
SELECT DISTINCT id FROM table GROUP BY id, value='5', value='6' |
||
Kcko Profil |
#3 · Zasláno: 5. 3. 2009, 14:03:32
SELECT id, COUNT(id) pocet FROM table WHERE value IN (5,6) GROUP BY id HAVING pocet = 2 /* pocet dopocitavame dynamicky podle poctu hodnot = value, trebas v PHP */ |
||
TomášK Profil |
#4 · Zasláno: 5. 3. 2009, 14:10:21 · Upravil/a: TomášK
Ten dotaz je takový divný :)
- Používáš GROUP BY na něco jiného než je určeno - tipuju, že v tom nemáš jasno - value='5' porovnáná číslo (předpokládám, že VALUE je INT) s řetězcem (sice to funguje, ale musí přetypovávat), lepší je value=5 Kcko Pokud správně rozumím zadání, tak by tvůj dotaz nefungoval na: 1 5 1 5 1 6 Doplnil bych ho ještě o DISTINCT: SELECT id, COUNT(DISTINCT id) pocet FROM table WHERE value IN (5,6) GROUP BY id HAVING pocet = 2 |
||
tiso Profil |
#5 · Zasláno: 5. 3. 2009, 14:26:59
TomášK - DISTINCT? tak si to teraz vyskúšaj čo to robí...
|
||
matak Profil |
#6 · Zasláno: 5. 3. 2009, 14:34:47 · Upravil/a: matak
souhlasím že kcko má lepší řešení, sic moje funguje taky, ale proto to sem píšu, že se mi nezdálo,
u kcko je DISTINCT v mém případě zbytečný, id a value jsou primární klíče |
||
tiso Profil |
#7 · Zasláno: 5. 3. 2009, 14:41:29
matak - s DISTINCT to nefunguje, a primárny kľúč môžeš mať v jednej tabuľke len jeden...
|
||
matak Profil |
#8 · Zasláno: 5. 3. 2009, 14:44:38
(id, value) je primární klíč, hlavně že si rozumíme o čem mluvíme, tedy nemůže se vyskytnout duplicitní pár id a value, tudíž jsem ani DISTINCT u řešení kcko nezkoušel
|
||
Kajman_ Profil * |
#9 · Zasláno: 5. 3. 2009, 15:04:39
Kdyby to nebyl unikátní klíč, tak to řeší count(distinct value).
|
||
tiso Profil |
#10 · Zasláno: 5. 3. 2009, 15:15:07
matak - jedna vec je rozumieť si, druhá správne sa vyjadrovať...
|
||
TomášK Profil |
#11 · Zasláno: 5. 3. 2009, 17:23:54
Uznávám chybu, má tam být value místo id, jak píše Kajman. A že to je zbytečné, pokud je (id,value) klíč, jak říkají další. Je by mě zajímalo, jestli opravdu mohl fungovat původní dotaz:
SELECT DISTINCT id FROM table GROUP BY id, value='5', value='6' Rozdělí to do skupin 1, 5 => 1, 1, 0 1, 6 => 1, 0, 1 2, 5 => 2, 1, 0 3, 6 => 3, 0, 1 4, 10 => 4, 0, 0 4, 11 => 4, 0, 0 tedy poslední dva záznamy dá do stejné skupiny a DISTINCT z toho vezme různé id, tedy bych čekal, že výsledek bude 1,2,3,4 a dotaz fungovat nebude. Nebo mi zas někde něco uniká? |
||
Kajman_ Profil * |
#12 · Zasláno: 6. 3. 2009, 14:15:55
TomášK
Touhle cestou to nepůjde. Leda by se to celé obalovalo, dalo další group by na id a havingem testovalo, že max obou sloupečků je 1. Ale výkonější bude již dříve zmíněné řešení. |
||
Časová prodleva: 15 let
|
0