Autor Zpráva
aDAm
Profil
Zdravím,
resim ted problem jak udelat select z databaze v tomto tvaru:

V tabulce mam sloupec VARCHAR kde ulozim cisla oddelena carkou "1,5,12,50" a potrebuju udelat select co vybere jen ty radky kde je mezi temi cisly treba "5"

Kdyz udelam podminku pomoci LIKE tak se omezim jen na cisla 1-9

Nevi nekdo jak to upravit aby dalo pouzit vice cisel?
panther
Profil
aDAm
není to něco jako:
... LIKE '%5%' ...
?
aDAm
Profil
o tom LIKE pisu...timhle to vyberu ale pokud tam bude 50 tak to vybere i ten radek a to uz neni ono, proto sem napsal ze me to takto omezilo jen na 1-9
aDAm
Profil
jinak se tedy omlouvam ze sem to hodil do sekce PHP, sekci Databaze sem nejak prehledl.
Joker
Profil
aDAm
Problém spočívá ve špatném návrhu databáze.

První normální forma: Sloupce obsahují pouze atomické údaje (= které už nejsou dál dělitelné).

Čili ve chvíli, kdy nějaká informace o objektu tvoří jen část sloupce v databázi, můžete se prakticky spolehnout, že je špatně návrh databáze.
aDAm
Profil
Joker
no tak treba by se to dalo vyresi dalsi tabulkou kde by byly tyto vztahy ulozeny a pak treba LEFT JOINem to vybrat

v tomto konkretnim pripade by se to dalo takto vyresit ale kdybych mel treba 20tabulek kde bych to taky potreboval tak to bych potreboval dalsich 20 tabulke kde by byly ulezny tyto vztahy.

Nebo mas nejaky jiny navrh jak to osetrit?
panther
Profil
aDAm
o tom LIKE pisu...timhle to vyberu ale pokud tam bude 50 tak to vybere i ten radek a to uz neni ono, proto sem napsal ze me to takto omezilo jen na 1-9
tak ani teď nevím, jestli tu 50 chceš vybrat (což podle první části věty nevypadá) nebo ne (podle druhé části příspěvku to vypadá, jako by tě omezení na 1-9 trápilo)..
Joker
Profil
aDAm
no tak treba by se to dalo vyresi dalsi tabulkou kde by byly tyto vztahy ulozeny a pak treba LEFT JOINem to vybrat
Správně.

v tomto konkretnim pripade by se to dalo takto vyresit ale kdybych mel treba 20tabulek kde bych to taky potreboval tak to bych potreboval dalsich 20 tabulke kde by byly ulezny tyto vztahy.
Ano, pokud by to skutečně bylo 40 různých entit, bylo by na jejich uložení potřeba 40 tabulek.
To je ale asi jako spekulovat nad tím, jestli by nešlo uložit do databáze 40 záznamů na méně než 40 řádků.
Joker
Profil
panther
LIKE to nevyřeší. A i kdyby nějak ano, tenhle návrh je cesta do pekel. Ukládat čísla do řetězce je špatně, ukládat více informací do jednoho sloupce je špatně.
Tohle je vpdostatě jen první ukázka, jak velké potíže tomuhle návrhu způsobí úplně triviální dotaz.

Ještě větší legrace by byla realizovat další jednoduché dotazy, například:
- Chci nejvyšší použité číslo.
- Chci všechny záznamy, které obsahují číslo větší než 25.
- Chci seznam čísel seřazený vzestupně a u každého čísla vypsat záznamy, které to číslo obsahují.
aDAm
Profil
Joker
mno asi to vyresim druhou tabulkou kde budou ty vztahy definovany. diky
AM_
Profil
Neřešil by to datový typ SET? Záleží to tedy na konkrétním problému, nevím, co přesně těmi čísly oddělenými čárkami řešíš a jakých tedy nabývají hodnot.
aDAm
Profil
AM_
ty čísla znamenají vazbu na druhou tabulku, hodnoty jsou integer cca 1-100
aDAm
Profil
Tak jsem se koukl na ten datový typ SET a není to to pravé ořechové, tady je potřeba zadat množinu jakých hodnot to bude nabývat a to není předem specifikováno, může to být 1,2 nebo také 1...1000 a ručně tam vytvářet množinu o 1000 položkách je moc pracné, navíc ten datový typ je omezen na 69 prvků tuším.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0