Autor | Zpráva | ||
---|---|---|---|
aDAm Profil |
#1 · Zasláno: 12. 3. 2009, 19:50:29
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 |
#2 · Zasláno: 12. 3. 2009, 19:53:08 · Upravil/a: panther
aDAm
není to něco jako: ... LIKE '%5%' ... |
||
aDAm Profil |
#3 · Zasláno: 12. 3. 2009, 20:02:23
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 |
#4 · Zasláno: 12. 3. 2009, 20:04:17
jinak se tedy omlouvam ze sem to hodil do sekce PHP, sekci Databaze sem nejak prehledl.
|
||
Joker Profil |
#5 · Zasláno: 12. 3. 2009, 20:04:19
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 |
#6 · Zasláno: 12. 3. 2009, 20:07:27
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 |
#7 · Zasláno: 12. 3. 2009, 20:08:16
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 |
#8 · Zasláno: 12. 3. 2009, 20:20:25
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 |
#9 · Zasláno: 12. 3. 2009, 20:36:28
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 |
#10 · Zasláno: 12. 3. 2009, 21:17:15
Joker
mno asi to vyresim druhou tabulkou kde budou ty vztahy definovany. diky |
||
AM_ Profil |
#11 · Zasláno: 12. 3. 2009, 21:29:18
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 |
#12 · Zasláno: 13. 3. 2009, 06:08:37
AM_
ty čísla znamenají vazbu na druhou tabulku, hodnoty jsou integer cca 1-100 |
||
aDAm Profil |
#13 · Zasláno: 13. 3. 2009, 11:34:54
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.
|
||
Časová prodleva: 15 let
|
0