Питане за set field type
4 отговора
0 прегледа
Питане за set field type
Проблем със следната таблица и примерно 3 записа.
Как може да се получи резултат разбит на отделните храни, сортиран по foods,name но ако някое име го има в два вида храна, както в примера е Bill да го има като два реда в резултата. Или по нагледно като резултата по долу
CREATE TABLE `test` (
`id` int(4) NOT NULL,
`foods` set('fish','pizza','chips') NOT NULL,
`name` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
+----+------------+---------+
| id | foods | name |
+----+------------+---------+
| 1 | fish,pizza | Bill |
| 2 | fish | Alison |
| 3 | chips | Charlie |
+----+------------+---------+
Как може да се получи резултат разбит на отделните храни, сортиран по foods,name но ако някое име го има в два вида храна, както в примера е Bill да го има като два реда в резултата. Или по нагледно като резултата по долу
+----+-------+---------+
| id | foods | name |
+----+-------+---------+
| 3 | chips | Charlie |
| 2 | fish | Alison |
| 1 | fish | Bill |
| 1 | pizza | Bill |
+----+-------+---------+
Re: Питане за set field type
хм .. аз ти бях отговорил ама някъде ми се е затрил отговора.
Прочети за Нормализация при базите данни. Има много из интернет. Wikipedia е добро начало [линк]
След като ти трябват такива заявки не използвай SET а изнеси food в отделна таблица и или промени PRIMARY KEY в тази или добави трета таблица (name_id, food_id).
т.е. нещо в стил:
CREATE TABLE name (id INT PRIMARY KEY, name VARCHAR(50));
CREATE TABLE food (id INT PRIMARY KEY, food CHAR(NN));
CREATE TABLE name_food (name_id INT, food_id INT, PRIMARY KEY(name_id, food_id));
salle.online.bg/sig
Прочети за Нормализация при базите данни. Има много из интернет. Wikipedia е добро начало [линк]
След като ти трябват такива заявки не използвай SET а изнеси food в отделна таблица и или промени PRIMARY KEY в тази или добави трета таблица (name_id, food_id).
т.е. нещо в стил:
CREATE TABLE name (id INT PRIMARY KEY, name VARCHAR(50));
CREATE TABLE food (id INT PRIMARY KEY, food CHAR(NN));
CREATE TABLE name_food (name_id INT, food_id INT, PRIMARY KEY(name_id, food_id));
salle.online.bg/sig
Re: Питане за set field type
Мерси за отговора. Абе какво им стана на тия хора. Не виждат ли че сме в криза
. Досега ядяха по една храна сега искат да ядат по повече. Много са промените дето трябва да се направят ако се ползват повече таблици. Затова се чудех дали няма някой начин дето да не се сещам за него. Явно няма, затова мисля да им разреша само по една храна да ядат.
Re: Питане за set field type
Ужас
Ще ги умориш от глад бе
Виж решението, което ти предлага salle. Класическо и разширямо е.
Изобщо - само плюсове.
Минусите, ако ги има, са пренебрежими.
Ще ги умориш от глад бе
Виж решението, което ти предлага salle. Класическо и разширямо е.
Изобщо - само плюсове.
Минусите, ако ги има, са пренебрежими.
Re: Питане за set field type
За съжаление нямам опит с тази функционалност в MySQL, но наистина би било хубаво да си нормализираш таблицата, както предлага и salle.
За да намалиш промените след това, можеш да си направиш изглед (view) със същото име като първоначалната таблица, което да обединява резултатните таблици и с помощта на GROUP_CONCAT() приложението ти да "вижда" същата структура. Освен това MySQL доколкото си спомням поддържа updatable views, само дето имаше някакво ограничение - ако има повече от една таблица. Може би вече са го премахнали, не знам. Ако не - слагаш един before trigger върху изгледа - така ще постигнеш същата функционалност без да пипаш и един ред в клиентското приложение.
"Договор, подписан с Русия, струва по-малко от хартията, върху която е написан!" - Бисмарк
За да намалиш промените след това, можеш да си направиш изглед (view) със същото име като първоначалната таблица, което да обединява резултатните таблици и с помощта на GROUP_CONCAT() приложението ти да "вижда" същата структура. Освен това MySQL доколкото си спомням поддържа updatable views, само дето имаше някакво ограничение - ако има повече от една таблица. Може би вече са го премахнали, не знам. Ако не - слагаш един before trigger върху изгледа - така ще постигнеш същата функционалност без да пипаш и един ред в клиентското приложение.
"Договор, подписан с Русия, струва по-малко от хартията, върху която е написан!" - Бисмарк
Редактирано от Dakota на