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

Форум MySQL

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

 

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

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

тема: Новость в нескольких категориях
 
 автор: steiger   (11.12.2007 в 09:12)   письмо автору
 
 

Здравствуйте.
Вопрос такой: нужно сделать, чтобы новость принадлежала нескольким категориям одновременно.
В БД, в таблице с новостями, в поле хранятся номера категорий, в которые добавлена каждая новость. В поле эта запись хранится в виде "1,2". Выборка из базы происходит по id новости. Если запись с таким id найдена, с помощью mysql_fetch_array печатаем новость.
Суть проблемы: если категорий для новости больше, чем одна, возникает ошибка. Номер категории ($value) передается функции getcategory($value), а это может быть не одно значение, а несколько. В принципе, я понимаю, что в саму функцию нужно поместить while. Но не понимаю, как передать ей два параметра.
Функция отвечает за выборку из таблицы категорий названия категории и URLа.

   
 
 автор: Trianon   (11.12.2007 в 09:28)   письмо автору
 
   для: steiger   (11.12.2007 в 09:12)
 

>В поле эта запись хранится в виде "1,2".

Так в БД данные не хранят.
У Вас налицо связь типа N:M - многие ко многим. Т.е. разные новости могут относиться к одной категории, разные категории могут быть поставлены в соответствие одной новости.

Создавайте связующую таблицу replacement (id_link, id_cat, id_news) и наполняйте её записями о размещении новостей в категориях.

   
 
 автор: steiger   (11.12.2007 в 10:35)   письмо автору
 
   для: Trianon   (11.12.2007 в 09:28)
 

>Так в БД данные не хранят.
Хм. Специально посмотрел в старом скрипте Data Life Engine - у них в поле category (тип varchar) данные хранятся как раз в таком виде. Как я понял, загоняют туда их через implode (',', $data), а извлекают через foreach.
Если не получится сделать так же, воспользуюсь Вашим советом.
Спасибо)

   
 
 автор: steiger   (11.12.2007 в 12:17)   письмо автору
 
   для: steiger   (11.12.2007 в 09:12)
 

Выход нашел.

// Сначала создаю массив из строки
  $catid = explode(',', $news['id_category']);
// потом превращаю массив в переменные 
  while (list($key, $value) = each($catid)) {
    getcategory($value);
  }

Изврат, конечно, но работает...
Теперь другой вопрос встал...
При выборке новостей для категории получаются только те, где указан один id_category. Возможна ли такая конструкция в запросе к БД?

$querygnews = "SELECT id_entry,
                   id_category,
                   ...
              FROM entries
              WHERE ".explode(',' id_category)."='$categid'
              ORDER BY date DESC";

В общем, можно ли в запрос внедрить explode?

   
Rambler's Top100
вверх

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