| | |
| Stránka: 1 z 1
| [ Príspevkov: 6 ] | |
Autor | Správa |
---|
Registrovaný: 10.11.11 Prihlásený: 04.08.17 Príspevky: 21 Témy: 5 |
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?
|
|
Registrovaný: 29.10.07 Prihlásený: 27.10.23 Príspevky: 1395 Témy: 30 Bydlisko: Bratislava |
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) )
_________________ PC: OS: Windows 11 (64bit) CPU: AMD Ryzen 5 3600 GPU: ASUS TUF RTX3060Ti 8GB RAM: 16GB DDR4-3200MHz Kingston Fury MB: ASUS TUF Gaming B550M WIFI SSD: 1000GB PCIe M.2 NVME Mobil: Xiaomi POCO F2 PRO |
|
Registrovaný: 10.11.11 Prihlásený: 04.08.17 Príspevky: 21 Témy: 5 | Napísal autor témy lukas15: 11.11.2011 11: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íspevkuEš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) )
|
|
Registrovaný: 29.10.07 Prihlásený: 27.10.23 Príspevky: 1395 Témy: 30 Bydlisko: Bratislava |
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)
_________________ PC: OS: Windows 11 (64bit) CPU: AMD Ryzen 5 3600 GPU: ASUS TUF RTX3060Ti 8GB RAM: 16GB DDR4-3200MHz Kingston Fury MB: ASUS TUF Gaming B550M WIFI SSD: 1000GB PCIe M.2 NVME Mobil: Xiaomi POCO F2 PRO |
|
Registrovaný: 29.10.08 Prihlásený: 30.07.12 Príspevky: 933 Témy: 2 | Napísal coldak: 11.11.2011 15:18 | |
|
GoodWill píše: 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) ?
|
|
Registrovaný: 29.10.07 Prihlásený: 27.10.23 Príspevky: 1395 Témy: 30 Bydlisko: Bratislava |
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
_________________ PC: OS: Windows 11 (64bit) CPU: AMD Ryzen 5 3600 GPU: ASUS TUF RTX3060Ti 8GB RAM: 16GB DDR4-3200MHz Kingston Fury MB: ASUS TUF Gaming B550M WIFI SSD: 1000GB PCIe M.2 NVME Mobil: Xiaomi POCO F2 PRO |
|
| Stránka: 1 z 1
| [ Príspevkov: 6 ] | |
| Nemôžete zakladať nové témy v tomto fóre 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
|
|