|
|
|
| Добрый вечер всем, вопрос по мультикатегориям. Т.е. что имеем сейчас - каждой новости присваивается своя единственная категория. Чего хочу - чтобы была возможность присваивать одной записи несколько категорий, т.е. к примеру не "новость-категория", а "новость-категория1, категория2, категория3". Подскажите пожалуйста как такое можно реализовать. | |
|
|
|
|
|
|
|
для: melomaniac
(03.01.2013 в 18:00)
| | тадлица новостей, таблица категорий, и таблица их связи
обычное отношение "многие ко многим" | |
|
|
|
|
|
|
|
для: Valick
(03.01.2013 в 20:50)
| | А можно пример какой-нить ? Пожалуйста :) | |
|
|
|
|
|
|
|
для: melomaniac
(03.01.2013 в 21:11)
| | таблица категорий:
cat_id | cat_name
-----------------
1 | программирование
2 | web
3 | desktop
4 | дизайн
|
Таблица наименований:
foo_id | foo_name
-----------------
1 | PHP
2 | HTML
3 | CSS
4 | Delphi
|
Таблица связей:
foo_id | cat_id
-----------------
1 | 1
1 | 2
2 | 2
3 | 2
3 | 4
4 | 1
4 | 3
|
| |
|
|
|
|
|
|
|
для: Sfinks
(03.01.2013 в 21:44)
| | Ок, спасибо огромное, буду вникать ;) | |
|
|
|
|
|
|
|
для: melomaniac
(03.01.2013 в 22:36)
| | Доброе утро всем. Собственно, создал я таблицу, но чет не получается ничего....
Сейчас получается 3 таблицы. Таблица с записями, таблица с категориями, и на вашем примере создал 3 таблицу связей между записями и категориями. в ней два поля, если я правильно понял - id записи(id) и id категории(subid). Но вот как писать в нее нужные значения не пойму, пробовал инсертом, но пишется только первая категория, т.е. если при выборе в input, 2 категорий, запишется только 1, а вторая нет. Таблица связей:
relation
--------------------------
id | subid
1 5
здесь должно быть второе значение, но оно не пишется :(
|
| |
|
|
|
|
|
|
|
для: melomaniac
(08.01.2013 в 05:00)
| | id в таблице связи слчайно не примари кей с автоинкремент?
В таблице связи надо сделать составной первичный ключь на оба поля, без автоинкремента. | |
|
|
|
|
|
|
|
для: Valick
(08.01.2013 в 07:21)
| | Не, как там автоинкримент может быть, я ведь пишу туда id новости. Т.е. в id - пишу id записи, а в subid - id категории. Я думаю просто сам запрос как-то не правильно делаю, может там в массиве нужно писать или еще как-то ? | |
|
|
|
|
|
|
|
для: melomaniac
(08.01.2013 в 18:27)
| | покажите запрос и форму для отправки | |
|
|
|
|
|
|
|
для: Valick
(08.01.2013 в 20:55)
| | А можно показать пример запроса SELECT из двух таблиц, используя таблицу связей?
Спасибо. | |
|
|
|
|
|
|
|
для: melomaniac
(08.01.2013 в 18:27)
| | Здравствуйте. Я тоже учусь и вникаю.
Но сдается мне, что Вы пропустили в таблице связей самое первое поле - id записей:
id | foo_id | cat_id
------------------------
1 | 1 | 1
2 | 1 | 2
3 | 2 | 2
4 | 3 | 2
5 | 3 | 4
6 | 4 | 1
7 | 4 | 3
|
И Ваш запрос, наверное, воспринимал foo_id as Primary key of this table. | |
|
|
|
|
|
|
|
для: Deed
(08.01.2013 в 21:51)
| | Но сдается мне, что Вы пропустили в таблице связей самое первое поле - id записей:
необязательно, да и примари на оба поля оптимальнее | |
|
|
|
|
|
|
|
для: Valick
(08.01.2013 в 22:19)
| | О как... Спасибо. | |
|
|
|
|
|
|
|
для: Deed
(08.01.2013 в 22:47)
| | здесь простая связь и первичный ключ на оба поля создает индекс и исключает добавление дублирующих записей отношения. | |
|
|
|
|
|
|
|
для: Deed
(08.01.2013 в 22:47)
| | Вопрос не в типе полей, а в том что я чего-то упустил :) Я так понимаю простым инсертом такое не запишеш, т.к. запись двух полей подряд не проходит, точнее скрипт вообще не вкурсе что нужно что-то писать более одного раза подряд, вот поэтому я и спросил про запись массива, т.к. если я правильно мыслю, это то что нужно, а может и нет.... | |
|
|
|
|
|
|
|
для: melomaniac
(08.01.2013 в 23:18)
| | достаточно читать внимательно мои сообщения ;)
повторюсь давайте код формы и обработчика с самим запросом | |
|
|
|
|
|
|
|
для: melomaniac
(08.01.2013 в 23:18)
| | Проблема в том, что Вас попросили показать запрос, но я, например, его так и не увидел.
Полагаю, что у вас добавляется одна связь, т.к. вы добавляете одну строку.
Уточню - что каждая строка в таблице связей - это одна связь. И строк должно быть ровно столько, сколько есть связей.
Т.е. на моем примере:
В таблице наименований есть язык программирования PHP (id=1) и он относится к категориям программирование (id=1) и web (id=2) из таблицы категорий.
Следовательно в таблицу связей надо добавить 2 строки.
А для этого надо выполнить либо 2 простые команды INSERT:
INSERT INTO svyazi (foo_id,cat_id) VALUES(1,1);
INSERT INTO svyazi (foo_id,cat_id) VALUES(1,2);
| Либо одну составную:
INSERT INTO svyazi (foo_id,cat_id) VALUES (1,1), (1,2)
|
| |
|
|
|