Autor Zpráva
elefant
Profil *
Dobrý deň,

prosím Vás o pomoc, mám menší problém s vytvorením MySQL dotazu. Mám 2 tabulky, kazdá má stĺpec, kde sa ukladajú čísla oddelené čiarkou (","). Potreboval by som sformulovat SQL dotaz, ktorý by porovnal tieto dva zoznamy a v prípade, ak by sa aspon 1 císlo v 1. zozname zhodovalo s císlom v 2. zozname, aby vrátilo výsledok. Ďakujem za pomoc
nightfish
Profil
elefant
špatný návrh tabulky, zbytečná onanie, doporučuju navrhnout tabulky znovu (a lépe)
Yrrah
Profil
Jojo, je to tak.

Pokud máš uloženo několik čísel jako seznam oddělený čárkou, musíš to při zpracování prostě procházet nějakou funkcí pracující s řetězci. Pro složitější operace ti nezbude nic jinýho, než tohle porovnávání dělat až v aplikaci (např. PHP).
To je prostě špatně, tohle by měla dělat DB sama.

Nejde fakt ta tabulka (tabulky) navrhnout nějak jinak?
nightfish
Profil
Nejde fakt ta tabulka (tabulky) navrhnout nějak jinak?
samozřejmě že jde... a když nám elefant popíše, čeho chce dosáhnout, tak mu možná i budeme schopni poradit
elefant
Profil *
nightfish:

Tak, co by som potreboval: mam tabulku "kategorie", "knihy" a mam tabulku "predajne". Kazda predajna sa specializuje len na urcite kategorie knih.

V tabulke kategorie mam riadky:

id | nazov_kategorie

1 | Počítačová literatúra
2 | Cudzojazyčná literatúra
3 | Cestopisy
4 | Literatúra pre deti
5 | Slovníky
6 | Náučná literatúra

tabulka predajne:

id_predajne | kategorie

1 | 1,3,5
2 | 1,2
3 | 1,2,3,4,5,6
4 | 3

tabulka knihy:

id | nazov | kategoria

1 | Programujeme v PHP | 1,2,6
2 | Slovensko-anglický slovník | 5
3 | Rozprávky | 4

Chcem si vypísať všetky knihy pre kníhkupectvá id_predajne 1, 2 a 3, ktoré sa v nich môžu predávať s ohľadom na zameranie (kategorie) kníhkupectva.

Pre knihkupectvo id_predajne 1 to budu tituly: Programujeme v PHP, Slovensko-anglicky slovnik
id_predajne 2 to budu tituly: Programujeme v PHP
id_predajne 3: Programujeme v PHP, Slovensko-anglicky slovnik, Rozprávky
id_predajne 4: prázdny výsledok

Vedeli by ste to, prosím, sformulovať do SQL dotazu ? Moja srdečná vďaka patrí tomu, komu sa to podarí, ale aj každému, kto sa aspon pokúsi mi pomôcť ;)
elefant
Profil *
No a este doplnim, ze to musí byt v max 2 SQL dotazoch (najlepsie v 1) kvoli zatezeniu servra - dotaz sa bude spustat za sekundu mozno 50-60 krat
Yrrah
Profil
tabulka predajne:
uprav to tak, aby ve sloupci kategorie bylo jen jedno cislo (pokud prodejna zahrnuje vice kategorii, bude mit v teto tabulce vice zaznamu)

tabulka knihy:
- to je proste spatne
v tabulce knihy maji byt pouze knihy, tj. sloupce id, nazev

udelej si navic tabulku napr.
knihy_kategorie,
kde budou sloupce id_knihy a id_kategorie
- pak pro tuhle tabulku plati to samy, co pro prodejny
elefant
Profil *
a potom to bude SQL dotaz:

SELECT knihy.nazov FROM knihy LEFT JOIN knihy_kategorie ON knihy_kategorie.id_knihy = knihy.id LEFT JOIN predajne_kategorie ON predajne_kategorie.id_predajne = predajne.id WHERE knihy_kategorie.kategoria = predajne_kategorie.kategoria

?
Yrrah
Profil
Tak si ten dotaz zkus a uvidíš, ne?
Fakt je mnohem rychlejší, než se na každou kravinu ptát na fórech.
Já nevim, nechce se mi tim prohrabovat. A stejně tak nevim, jestli se ty tabulky a sloupečky OPRAVDU tak jmenují...
elefant
Profil *
Okej, aj tak vdaka za rady ;-) Teraz sa ten dotaz uz nejak postavit da
Toto téma je uzamčeno. Odpověď nelze zaslat.