Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 6 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.11.11
Prihlásený: 04.08.17
Príspevky: 21
Témy: 5
Príspevok NapísalOffline : 10.11.2011 15: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?


Offline

Skúsený užívateľ
Skúsený užívateľ
mysql-vyhladavanie

Registrovaný: 29.10.07
Prihlásený: 27.10.23
Príspevky: 1395
Témy: 30
Bydlisko: Bratislava
Príspevok NapísalOffline : 10.11.2011 16: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)  )







_________________
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
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 10.11.11
Prihlásený: 04.08.17
Príspevky: 21
Témy: 5
Príspevok Napísal autor témyOffline : 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í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)  )


Offline

Skúsený užívateľ
Skúsený užívateľ
mysql-vyhladavanie

Registrovaný: 29.10.07
Prihlásený: 27.10.23
Príspevky: 1395
Témy: 30
Bydlisko: Bratislava
Príspevok NapísalOffline : 11.11.2011 14: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)







_________________
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
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 29.10.08
Prihlásený: 30.07.12
Príspevky: 933
Témy: 2
Príspevok NapísalOffline : 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)
?


Offline

Skúsený užívateľ
Skúsený užívateľ
mysql-vyhladavanie

Registrovaný: 29.10.07
Prihlásený: 27.10.23
Príspevky: 1395
Témy: 30
Bydlisko: Bratislava
Príspevok NapísalOffline : 11.11.2011 15: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







_________________
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
Odpovedať na tému [ 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

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra