Autor | Zpráva | ||
---|---|---|---|
mackopu Profil |
#1 · Zasláno: 23. 6. 2005, 16:08:44
Mám tabulku s registrovanými osobami, které postupně procházejí třemi typy kurzů. Tabulka tedy obsahuje osoby, které k dnešnímu dni absolvovaly jen kurz 1, pak osoby, které absolvovaly kurz 1 a 2 (tyto osoby jsou tedy zapsány dvakrát - např. id 123, rc 000000000, jmeno Jan Novák, kurz 1 - id 245, rc 000000000, jmeno Jan Novák, kurz 2) a také osoby, které mají stejným způsobem zapsáno absolvování kuzů 1, 2 a 3.
Nyní potřebuji zjistit počet osob, které absolvovaly všechny tři kurzy. Toto samozřejmě nefunguje a vypisuje nulu: $dotaz = mysql_query("select id FROM registrace WHERE typ = '1' AND typ = '2' AND typ = '3'"); Nevíte někdo jak na to a přitom nepoužít cyklus? |
||
juneau Profil |
#2 · Zasláno: 23. 6. 2005, 16:26:32
no, ja bych mozna trochu zmenil tabulku.... kazdeho tam mel jen jednou a tri pole "kurz1, kurz2, kurz3".
ty kurzy by byly treba ENUM('0','1') a ty bys pak vybiral treba jen: SELECT count(id) FROM registrace WHERE kurz1=1 AND kurz2=1 AND kurz3=1 to je podle me lepsi reseni. (nebo jsem nepochopil otazku) |
||
mackopu Profil |
#3 · Zasláno: 23. 6. 2005, 16:31:35
Tabulku měnit nelze, jsou k tomu důvody.
|
||
Boldrik Profil |
#4 · Zasláno: 23. 6. 2005, 16:41:33
pokud nemas neco podle ceho budes unikatne identifikovat osobu (treba jemno), tak nelze.
|
||
mackopu Profil |
#5 · Zasláno: 23. 6. 2005, 16:43:36
Mám, to je to rc - rodné číslo (v příkladu jsem vypsal nuly). Takže?
|
||
Boldrik Profil |
#6 · Zasláno: 23. 6. 2005, 16:59:05
pockej, odzkousim si to
|
||
Boldrik Profil |
#7 · Zasláno: 23. 6. 2005, 17:06:56
1, - jestli absolvovali postupne, nestacil by dotaz na 3 kurz?
2, - jestli absolvovali postupne, nestacil by dotaz zda prosel 3 kurzy? |
||
mackopu Profil |
#8 · Zasláno: 23. 6. 2005, 17:07:03
Já jsem to doposud rozchodil jen pomocí cyklu:
$dotaz=mysql_query("select distinct rc FROM registrace"); Ale to je opravdu nepěkné a z nouze. Cyklu bych se nejraději vyhnul, těch záznamů je opravdu ranec. |
||
mackopu Profil |
#9 · Zasláno: 23. 6. 2005, 17:08:03
To je právě to, že kurzy lze absolvovat "na přeskáčku".
|
||
Boldrik Profil |
#10 · Zasláno: 23. 6. 2005, 17:08:41
tak dvojka? muze projit jeden kurz 2x??
|
||
mackopu Profil |
#11 · Zasláno: 23. 6. 2005, 17:10:22
Každý kurz může absolvovat jen jednou.
|
||
Boldrik Profil |
#12 · Zasláno: 23. 6. 2005, 17:13:59
SELECT COUNT(x) AS Vysledek
FROM (SELECT COUNT(id) AS x, rc FROM dbo.Table1 GROUP BY rc) DERIVEDTBL WHERE (x = 3) takhle to funguje na MS SqlServeru 2000 |
||
Boldrik Profil |
#13 · Zasláno: 23. 6. 2005, 17:20:19
nebo jestli nezna DERIVEDTBL, tak
SELECT COUNT(x) AS Vysledek FROM (SELECT COUNT(id) AS x, rc FROM dbo.Table1 GROUP BY rc) as y WHERE (y.x = 3) |
||
Boldrik Profil |
#14 · Zasláno: 23. 6. 2005, 17:24:47
v kazdem pripade by bylo logicke, aby klic k tabulce bylo redne cislo + typ kurzu a ne id
|
||
mackopu Profil |
#15 · Zasláno: 24. 6. 2005, 13:31:49
Tak už to mám:
$dotaz = mysql_query("SELECT rc FROM registrace GROUP BY rc HAVING COUNT(rc)=3"); Klauzule HAVING omezuje rozsah tabulky tím, že z řádků vyřadí ty, které neodpovídají dané podmínce. V tomto případě zjišťuje 3 výskyty stejného rodného čísla, což je v daném případě relevantní, uvážíme-li, že absolventi kurzů mohou být zapsáni právě maximálně třikrát. Za otevření očí děkuji kamarádu Zedovi a každopádně i všem účastníkům této diskuze za ochotu a tímto se o výsledek dělím s ostatními. |
||
Časová prodleva: 19 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0