Autor | Zpráva | ||
---|---|---|---|
petrr Profil * |
#1 · Zasláno: 6. 8. 2010, 10:54:45
Ahojky, mam vytvorený select který má 3 hodnoty - zelenou, modrou, a červenou barvu,
jak se v tomto případě nastavuje datový typ v databázi? a jak se do ní ukládá? Děkuji |
||
DoubleThink Profil * |
#2 · Zasláno: 6. 8. 2010, 10:56:48
ENUM. Případně SET, pokud by šla vybrat více než jedna barva.
|
||
tiso Profil |
#3 · Zasláno: 6. 8. 2010, 11:01:19
Máš na výber viac možností: ukladať celý string, id farby, alebo použiť typ enum. Pokiaľ je možné vybrať viac farieb (používaš multiselekt) tak ešte funguje typ set. Pri enum a set potrebuješ vedieť dopredu všetky hodnoty, takže sú vhodné iba na stály zoznam hodnôt.
|
||
petrr Profil * |
#4 · Zasláno: 6. 8. 2010, 11:24:46
kdyz tam zadám enum nebo set vypisuje mi to chybu:
MySQL hlásí: Dokumentace #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL' at line 1 Co tam musim jeste nastavit?? dekuji |
||
AM_ Profil |
#5 · Zasláno: 6. 8. 2010, 12:52:31 · Upravil/a: AM_
Mě tedy přijde nejlepší mít barvy označené čísly, tedy
<option value="1">Cervena</option> <option value="2">Modra</option> a v DB tedy ukládat obyčejný INT. Typům SET a ENUM se obvykle raději vyhýbám, dle mého názoru nejsou v MySQL zrovna šťastně implementované (nevím, jestli se jedná o implementaci v MySQL nebo obecně vlastnosti SQL, hnidopiši prominou). [#4] petrr Máš syntaktickou chybu v dotazu, buď si jí tam najdi nebo sem napiš ten dotaz [#5] petrr pokud toto uděláš ještě jednou, navrhuji moderátorům, aby z tvé IP zakázali přístup na fórum. Re-posty jsou zde považovány za drzost, jako když se malé dítě řvaním dožaduje pozornosti, ale vlastně jen všechny okolo otravuje. (pozn. šlo o "bump" vlákna napsáním pouhého otazníku hodinu po příspěvku č.4) |
||
Joker Profil |
#6 · Zasláno: 6. 8. 2010, 12:54:46
AM:
„pokud toto uděláš ještě jednou, navrhuji moderátorům, aby z tvé IP zakázali přístup na fórum“ Mezitím jsem ten příspěvek vyhodil. Ale taky si všímám, že petrr nakopává svá vlákna opakovaně a ignoruje upozornění moderátorů, aby to nedělal. |
||
petrr Profil * |
#7 · Zasláno: 6. 8. 2010, 13:48:56
Promiňte omlouvám se všem....
|
||
DoubleThink Profil * |
#8 · Zasláno: 8. 8. 2010, 16:07:27 · Upravil/a: DoubleThink
AM:
„Typům SET a ENUM se obvykle raději vyhýbám, dle mého názoru nejsou v MySQL zrovna šťastně implementované“ Máš na mysli něco konkrétního? Implementace je celkem normální, hodnoty jsou enumerovány do vlastní tabulky a ve sloupci už jsou klasicky jen identifikátory. Totéž můžeš udělat i ručně - Enumerací v normální tabulce a sloupec je pak klasický UINT s hodnotami sloučenými binárním OR. S trochou péče a vlastních funkcí se s tím dá pracovat skoro (stejně) transparentně. |
||
AM_ Profil |
#9 · Zasláno: 8. 8. 2010, 16:27:26 · Upravil/a: AM_
no třeba že u SET nemůže být více než 64 položek, a pak že testování, zda se výrobek nachází v kategorii lednice, se provádí pomocí WHERE výrobek LIKE '%lednice%', což teoreticky matchne i kategorii 'polednice', ikdyž pohádku o polednici zákazník nakupující domácí spotřebiče zřejmě koupit nechtěl.
Možná s tím jen ale neumím, ale nikde jsem lepší informace nenašel, proto si raději podobné věci píši sám a SET dělám přes cross-reference tabulky. |
||
tiso Profil |
#10 · Zasláno: 8. 8. 2010, 20:32:10
AM: nejaký reálny príklad kde si potreboval viac ako 64 hodnôt? A s tým where si sa náhodou nepomýlil?
|
||
AM_ Profil |
#11 · Zasláno: 8. 8. 2010, 20:36:33
tiso:
„nejaký reálny príklad kde si potreboval viac ako 64 hodnôt?“ reálně nevím, to máš pravdu, ale jako hypotetický strop mi to přijde celkem nízké - náhoda je blbec a kvůli jedné položce pak přepisovat program není ideální. „A s tým where si sa náhodou nepomýlil?“ když jsem hledal, jak se se SET pracuje, našel jsem to takto. Jak říkám, možná s tím jen neumím a jde to lépe. |
||
DoubleThink Profil * |
#12 · Zasláno: 9. 8. 2010, 00:11:38
V SETu by se mělo vyhledávat funkcí FIND_IN_SET, alternativně pak pro větší požitek z trápení serveru nějakým konkrétnějším regulárem pomocí RLIKE.
|
||
Časová prodleva: 14 let
|
0