|
|
|
| Здравствуйте.
Вопрос такой: нужно сделать, чтобы новость принадлежала нескольким категориям одновременно.
В БД, в таблице с новостями, в поле хранятся номера категорий, в которые добавлена каждая новость. В поле эта запись хранится в виде "1,2". Выборка из базы происходит по id новости. Если запись с таким id найдена, с помощью mysql_fetch_array печатаем новость.
Суть проблемы: если категорий для новости больше, чем одна, возникает ошибка. Номер категории ($value) передается функции getcategory($value), а это может быть не одно значение, а несколько. В принципе, я понимаю, что в саму функцию нужно поместить while. Но не понимаю, как передать ей два параметра.
Функция отвечает за выборку из таблицы категорий названия категории и URLа. | |
|
|
|
|
|
|
|
для: steiger
(11.12.2007 в 09:12)
| | >В поле эта запись хранится в виде "1,2".
Так в БД данные не хранят.
У Вас налицо связь типа N:M - многие ко многим. Т.е. разные новости могут относиться к одной категории, разные категории могут быть поставлены в соответствие одной новости.
Создавайте связующую таблицу replacement (id_link, id_cat, id_news) и наполняйте её записями о размещении новостей в категориях. | |
|
|
|
|
|
|
|
для: Trianon
(11.12.2007 в 09:28)
| | >Так в БД данные не хранят.
Хм. Специально посмотрел в старом скрипте Data Life Engine - у них в поле category (тип varchar) данные хранятся как раз в таком виде. Как я понял, загоняют туда их через implode (',', $data), а извлекают через foreach.
Если не получится сделать так же, воспользуюсь Вашим советом.
Спасибо) | |
|
|
|
|
|
|
|
для: 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? | |
|
|
|