Právě je 14 kvě 2021 04:13

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 3 ] 
Autor Zpráva
 Předmět příspěvku: Složitější SQL dotaz - Vazby mezi tabulkami
PříspěvekNapsal: 25 zář 2012 13:46 

Registrován:
25 zář 2012 13:36
Příspěvky:
1
Ahoj,
rád bych poprosil o radu s SQL dotazem.

V jedné tabulce mám jednoduchý číselník, název služby a číselný kód.

V druhé tabulce pak mám názvy firem a pod atributem služby je seznam dostupných služeb oddělený dvojtečkou - takže varchar, např. "14:25:118".

Pomocí php pak vypisuji firmy podle služeb, např. SELECT * FROM firmy where sluzby LIKE %14%

Problém mám s tím, že služeb je hodně a pomocí LIKE se pak na dotaz "14" vypisují i "114", "142" atd.

Dá se tento problém vyřešit nějak slušně, abych nemusel sepisovat mnohařádkový sql dotaz eliminující všechny možnosti?

Předem děkuji za radu.

Kamil


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Složitější SQL dotaz
PříspěvekNapsal: 18 říj 2012 14:38 
C4 podpora
C4 podpora

Registrován:
29 čer 2009 20:53
Příspěvky:
263
Dobrý den,

šlo by to udělat tak, že byste vypsal všechny čtyři možnosti:

Kód:
SELECT * FROM firmy where sluzby = '14' OR sluzby LIKE "14:%" OR sluzby LIKE "%:14" OR sluzby "LIKE %:14:%"


Samozřejmě zásadní problém je, že takto se v SQL nepracuje, takže je to řešení, které je zdlouhavé na zápis a pomalé. Správně byste měl vytvořit vazební tabulku sluzby_firmy, která by obsahovala dva sloupce sluzba_id a firma_id a tu následně v SQL dotazech připojovat ke zbylým dvěma tabulkám.

_________________
Jan Vítek
Webhosting C4
http://www.c4.cz/


Nahoru
 Profil  
 
 Předmět příspěvku: Re: Složitější SQL dotaz - Vazby mezi tabulkami
PříspěvekNapsal: 28 říj 2012 12:34 
C4 podpora
C4 podpora

Registrován:
01 črc 2009 12:23
Příspěvky:
44
Ještě je možnost přidat na začátek a konec těch dotazovaných služeb také dvojtečku, tím se zjednoduší dotaz:

Kód:
SELECT * FROM firmy WHERE CONCAT(':',sluzby,':') LIKE '%:14:%'


Případně pokud by ty hodnoty byly oddělené čarkou, šla by použít funkce MySQL FIND_IN_SET().

Ale jak psal Honza, je to neefektivní a popírá to atomicitu databází.

_________________
Adam Chyský
Webhosting C4
http://www.c4.cz/


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 3 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 0 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
cron
FTP Uploader
Staňte se naším zákazníkem!
Hledáme kolegy
PHP, MySQL Hosting
Návody pro C4

© 2009-2021 ČESKÝ WEBHOSTING s.r.o. Kontaktní e-mail: forum@c4.cz
Diskuzní fórum využívá technologie: phpBB, phpBB-SEO.com, phpBB.cz