Autor Zpráva
petrr
Profil *
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 *
ENUM. Případně SET, pokud by šla vybrat více než jedna barva.
tiso
Profil
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 *
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
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
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 *
Promiňte omlouvám se všem....
DoubleThink
Profil *
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
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
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
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 *
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.

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: