|
 | | |
| Autor | Správa |
lukas15
 Užívateľ
 Založený: 10.11.2011 Príspevky: 16
 | Zaslal: Št 10.11.11 16:22 |   |
Mám takýto problém: v databáze mám dve tabuľky napr. tabuľka A tá má stĺpce (a_ id , zlozenie). Druhá tabuľka napr. B má stĺpce (b_ id, cislo, a_id) v tejto tabuľke je 10 čísel , ktoré majú rovnaké A_id (teda patria k jednému zlozeniu z tabuľky A). Mám formulár do ktorého zadám: zloženie, a
číslo1, číslo2, číslo3. Ako mám spraviť , aby mi vypísalo dané zloženie len ak sa zhodujú všetky 3 zadané čísla s číslami v stĺpci (cislo) v tabuľky B? |
| |
  |
 |
GoodWill
 Skúsený užívateľ
 Založený: 29.10.2007 Príspevky: 1000 Bydlisko: Bratislava
 | Zaslal: Št 10.11.11 17:19 |   |
Otazne je, ci chces zlozenie z tabulky A vybrat vtedy ak
1) zadane hodnoty vo formulary splnaju vsetky cisla z tabulky B (cize ak je v tabulke B pre zlozenie 10 hodnot, vo formulari musi byt tiez 10 hodnot)
2) zadane hodnoty vo formulary su priradene len pre jedno zlozenie, cize vsetky cisla z formulara maju v tabulke B rovnaku hodnotu a_id (a envadi ze vo formulari su len 3 cisla, a v tabulke B mas pre jedno zlozenie 10 hodnot)
V prvom pripade mas zlu strukturu tabuliek. Viac by sa hodilo keby si namiesto 10 riadkov mal len jeden, v ktorom by boli ciselne hodnoty naskladane vedla seba zoradene podla hodnoty a oddelene napr medzerou.
V druhom pripade to mozes skusit takto
| kód: | SELECT *
FROM A
WHERE a_id = ( SELECT a_id
FROM B
WHERE cislo IN (hodnoty z formulara)
GROUP BY a_id
HAVING MIN(a_id) = MAX(a_id) )
|
|
_________________ Koľko SEO expertov je potrebných na výmenu žiarovky výmena žiaroviek žiarovka nové žiarovky úsporné žiarovky sexy žiarovka? | |
   |
 |
lukas15
 Užívateľ
 Založený: 10.11.2011 Príspevky: 16
 | Zaslal: Pi 11.11.11 12:40 |   |
Vďaka funguje to. Bol to ten druhý prípad, tých 10 čísel som uviedol len ako príklad môže ich byť 1,2,...n.
// pridané po 18 hodinách 2 minútach od posledného príspevku
Ešte jeden dotaz. Ako to mám spraviť aby mi výpísalo len ten záznam, ktorý obsahuje všetky 3 zadané čísla, lebo takto mi ho vypíše aj keď sa zhoduje len v jednom čísle. Skúšal som tam dať AND, ale nefunguje to.
| kód: | SELECT *
FROM A
WHERE a_id = ( SELECT a_id
FROM B
WHERE cislo IN ($c1 AND $c2 AND $c3)
GROUP BY a_id
HAVING MIN(a_id) = MAX(a_id) ) |
|
| |
  |
 |
GoodWill
 Skúsený užívateľ
 Založený: 29.10.2007 Príspevky: 1000 Bydlisko: Bratislava
 | Zaslal: Pi 11.11.11 15:55 |   |
Bez ANDu, len treba rozsirit podmienku v HAVING o konkretny pocet hodnot
| kód: | SELECT *
FROM A
WHERE a_id = ( SELECT a_id
FROM B
WHERE cislo IN ($c1, $c2, $c3)
GROUP BY a_id
HAVING MIN(a_id) = MAX(a_id)
AND count(*) = 3) |
|
_________________ Koľko SEO expertov je potrebných na výmenu žiarovky výmena žiaroviek žiarovka nové žiarovky úsporné žiarovky sexy žiarovka? | |
   |
 |
coldak
 Skúsený užívateľ
 Založený: 29.10.2008 Príspevky: 936
 | Zaslal: Pi 11.11.11 16:18 |   |
| GoodWill napísal: | Bez ANDu, len treba rozsirit podmienku v HAVING o konkretny pocet hodnot
| kód: | SELECT *
FROM A
WHERE a_id = ( SELECT a_id
FROM B
WHERE cislo IN ($c1, $c2, $c3)
GROUP BY a_id
HAVING MIN(a_id) = MAX(a_id)
AND count(*) = 3) |
|
este to fixni. co ak bude mat v tabulke B 3 krat to iste cislo ktore bude tiez vyhovovat podmienke IN ($c1, $c2, $c3) ? priklad
$c1 = 1
$c2 = 2
$c3 = 3
a v tabulke b bude mat pre jedno a_id 3* hodnotu 1 .
a tiez by ma zaujimalo naco je tam | kód: | | HAVING MIN(a_id) = MAX(a_id) | ? |
| |
  |
 |
GoodWill
 Skúsený užívateľ
 Založený: 29.10.2007 Príspevky: 1000 Bydlisko: Bratislava
 | Zaslal: Pi 11.11.11 16:55 |   |
Nepocital som s tym ze by zlozenie zostavy tvorili rovnake hodnoty, ale ok, namiesto count(*) treba dat count(DISTINCT cislo)
min(a_id) = max(a_id) je tam preto, aby sme vybrali prave tu jednu zostavu ktora zlozeniu vyhovuje. Pravodu je ze zlozeniu moze vyhovovat zostav viac a kedze uz tam mame ten count, tak staci ak v havingu zostane ten. Potom samozrejme WHERE a_id IN |
_________________ Koľko SEO expertov je potrebných na výmenu žiarovky výmena žiaroviek žiarovka nové žiarovky úsporné žiarovky sexy žiarovka? | |
   |
 |
|
Nemôžete pridávať nové témy do tohto fóra. Nemôžete odpovedať na témy v tomto fóre. Nemôžete upravovať svoje príspevky v tomto fóre. Nemôžete mazať svoje príspevky v tomto fóre. Nemôžete hlasovať v tomto fóre.
|
| |