Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Мультикатегории
 
 автор: melomaniac   (03.01.2013 в 18:00)   письмо автору
 
 

Добрый вечер всем, вопрос по мультикатегориям. Т.е. что имеем сейчас - каждой новости присваивается своя единственная категория. Чего хочу - чтобы была возможность присваивать одной записи несколько категорий, т.е. к примеру не "новость-категория", а "новость-категория1, категория2, категория3". Подскажите пожалуйста как такое можно реализовать.

  Ответить  
 
 автор: Valick   (03.01.2013 в 20:50)   письмо автору
 
   для: melomaniac   (03.01.2013 в 18:00)
 

тадлица новостей, таблица категорий, и таблица их связи
обычное отношение "многие ко многим"

  Ответить  
 
 автор: melomaniac   (03.01.2013 в 21:11)   письмо автору
 
   для: Valick   (03.01.2013 в 20:50)
 

А можно пример какой-нить ? Пожалуйста :)

  Ответить  
 
 автор: Sfinks   (03.01.2013 в 21:44)   письмо автору
 
   для: 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

  Ответить  
 
 автор: melomaniac   (03.01.2013 в 22:36)   письмо автору
 
   для: Sfinks   (03.01.2013 в 21:44)
 

Ок, спасибо огромное, буду вникать ;)

  Ответить  
 
 автор: melomaniac   (08.01.2013 в 05:00)   письмо автору
 
   для: melomaniac   (03.01.2013 в 22:36)
 

Доброе утро всем. Собственно, создал я таблицу, но чет не получается ничего....
Сейчас получается 3 таблицы. Таблица с записями, таблица с категориями, и на вашем примере создал 3 таблицу связей между записями и категориями. в ней два поля, если я правильно понял - id записи(id) и id категории(subid). Но вот как писать в нее нужные значения не пойму, пробовал инсертом, но пишется только первая категория, т.е. если при выборе в input, 2 категорий, запишется только 1, а вторая нет. Таблица связей:

relation
--------------------------
id | subid
1        5
здесь должно быть второе значение, но оно не пишется :(

  Ответить  
 
 автор: Valick   (08.01.2013 в 07:21)   письмо автору
 
   для: melomaniac   (08.01.2013 в 05:00)
 

id в таблице связи слчайно не примари кей с автоинкремент?
В таблице связи надо сделать составной первичный ключь на оба поля, без автоинкремента.

  Ответить  
 
 автор: melomaniac   (08.01.2013 в 18:27)   письмо автору
 
   для: Valick   (08.01.2013 в 07:21)
 

Не, как там автоинкримент может быть, я ведь пишу туда id новости. Т.е. в id - пишу id записи, а в subid - id категории. Я думаю просто сам запрос как-то не правильно делаю, может там в массиве нужно писать или еще как-то ?

  Ответить  
 
 автор: Valick   (08.01.2013 в 20:55)   письмо автору
 
   для: melomaniac   (08.01.2013 в 18:27)
 

покажите запрос и форму для отправки

  Ответить  
 
 автор: Deed   (08.01.2013 в 21:52)   письмо автору
 
   для: Valick   (08.01.2013 в 20:55)
 

А можно показать пример запроса SELECT из двух таблиц, используя таблицу связей?
Спасибо.

  Ответить  
 
 автор: Deed   (08.01.2013 в 21:51)   письмо автору
 
   для: 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.

  Ответить  
 
 автор: Valick   (08.01.2013 в 22:19)   письмо автору
 
   для: Deed   (08.01.2013 в 21:51)
 

Но сдается мне, что Вы пропустили в таблице связей самое первое поле - id записей:
необязательно, да и примари на оба поля оптимальнее

  Ответить  
 
 автор: Deed   (08.01.2013 в 22:47)   письмо автору
 
   для: Valick   (08.01.2013 в 22:19)
 

О как... Спасибо.

  Ответить  
 
 автор: Valick   (08.01.2013 в 23:12)   письмо автору
 
   для: Deed   (08.01.2013 в 22:47)
 

здесь простая связь и первичный ключ на оба поля создает индекс и исключает добавление дублирующих записей отношения.

  Ответить  
 
 автор: melomaniac   (08.01.2013 в 23:18)   письмо автору
 
   для: Deed   (08.01.2013 в 22:47)
 

Вопрос не в типе полей, а в том что я чего-то упустил :) Я так понимаю простым инсертом такое не запишеш, т.к. запись двух полей подряд не проходит, точнее скрипт вообще не вкурсе что нужно что-то писать более одного раза подряд, вот поэтому я и спросил про запись массива, т.к. если я правильно мыслю, это то что нужно, а может и нет....

  Ответить  
 
 автор: Valick   (08.01.2013 в 23:28)   письмо автору
 
   для: melomaniac   (08.01.2013 в 23:18)
 

достаточно читать внимательно мои сообщения ;)
повторюсь давайте код формы и обработчика с самим запросом

  Ответить  
 
 автор: Sfinks   (10.01.2013 в 00:03)   письмо автору
 
   для: 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)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования