|
Тема
|
Питане за set field type
|
|
Автор |
Borko (един от тълпата) |
Публикувано | 14.12.08 18:55 |
|
Проблем със следната таблица и примерно 3 записа.
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
[re: Borko]
|
|
Автор |
salle (един такъв) |
Публикувано | 17.12.08 12:47 |
|
хм .. аз ти бях отговорил ама някъде ми се е затрил отговора.
Прочети за Нормализация при базите данни. Има много из интернет. 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));
| |
Тема
|
Re: Питане за set field type
[re: salle]
|
|
Автор |
Borko (един от тълпата) |
Публикувано | 18.12.08 22:28 |
|
Мерси за отговора. Абе какво им стана на тия хора. Не виждат ли че сме в криза . Досега ядяха по една храна сега искат да ядат по повече. Много са промените дето трябва да се направят ако се ползват повече таблици. Затова се чудех дали няма някой начин дето да не се сещам за него. Явно няма, затова мисля да им разреша само по една храна да ядат.
| |
Тема
|
Re: Питане за set field type
[re: Borko]
|
|
Автор |
NDeu (динозавър) |
Публикувано | 20.12.08 22:18 |
|
Ужас
Ще ги умориш от глад бе
Виж решението, което ти предлага salle. Класическо и разширямо е.
Изобщо - само плюсове.
Минусите, ако ги има, са пренебрежими.
| |
Тема
|
Re: Питане за set field type
[re: Borko]
|
|
Автор |
Dakota (erotoman) |
Публикувано | 06.01.09 14:36 |
|
За съжаление нямам опит с тази функционалност в MySQL, но наистина би било хубаво да си нормализираш таблицата, както предлага и salle.
За да намалиш промените след това, можеш да си направиш изглед (view) със същото име като първоначалната таблица, което да обединява резултатните таблици и с помощта на GROUP_CONCAT() приложението ти да "вижда" същата структура. Освен това MySQL доколкото си спомням поддържа updatable views, само дето имаше някакво ограничение - ако има повече от една таблица. Може би вече са го премахнали, не знам. Ако не - слагаш един before trigger върху изгледа - така ще постигнеш същата функционалност без да пипаш и един ред в клиентското приложение.
"Договор, подписан с Русия, струва по-малко от хартията, върху която е написан!" - БисмаркРедактирано от Dakota на 06.01.09 14:38.
| |
|
|
|
|