Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Как вывести статьи из одной категории?
Покинул форум
Сообщений всего: 490
Дата рег-ции: Янв. 2010
Помог: 0 раз(а)
Ув. гуру!
Что-то не получается у меня.. помогите, пожалуйста.
На новостном сайте каждая статья может находится в нескольких категориях. Информация о категория, в которые добавлена статья, хранятся в mysql в базе в поле через запятую "1,3,13"
Как мне организовать вывод статей в категориях? Не могу понять как составить MYSQL запрос.
У меня получился вот такой запрос (статья может относится и только к 1 категории, поэтому получилось так много LIKE):
$sql_result=$db->query("SELECT id, title, alt_name, xfields, news_read, comm_num FROM dle_post WHERE approve=1 AND (category='$category_id' OR category LIKE '%,$category_id,%' OR category LIKE '%,$category_id%') AND alt_name LIKE '%sezon%' ");
$category_id содержит ID просматриваемой в данный момент категории.
Запрос точно неправильный.. тут надо $category_id чтоли на массив разбить.. но как потом это в mysqp запрос вставить... помогите, пожалуйста.
Faraon-san
Отправлено: 06 Апреля, 2015 - 16:29:22
Посетитель
Покинул форум
Сообщений всего: 318
Дата рег-ции: Сент. 2013
Помог: 8 раз(а)
Лучше было отдельная таблица с названиями категорий, таблица со статьями и отдельная таблица номер категории и номер статьи.
Мелкий
Отправлено: 06 Апреля, 2015 - 16:32:03
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Extazy пишет:
Информация о категория, в которые добавлена статья, хранятся в mysql в базе в поле через запятую "1,3,13"
Вы за 5 лет с момента регистрации ни разу не видели, как за подобный бред бьют по рукам?
Нормализуйте схему.
----- PostgreSQL DBA
Extazy
Отправлено: 06 Апреля, 2015 - 16:32:27
Посетитель
Покинул форум
Сообщений всего: 490
Дата рег-ции: Янв. 2010
Помог: 0 раз(а)
Не могу переделать - так устроен движок Datalife. Помогите, пожалуйста.
Faraon-san
Отправлено: 06 Апреля, 2015 - 16:41:19
Посетитель
Покинул форум
Сообщений всего: 318
Дата рег-ции: Сент. 2013
$sql_result=$db->query("SELECT `id`, `title`, `alt_name`, `xfields`, `news_read`, `comm_num` FROM `dle_post` WHERE `approve` = '1' AND `category` LIKE '%{$category_id}%' AND `alt_name` LIKE '%sezon%'");
Extazy
Отправлено: 06 Апреля, 2015 - 17:21:00
Посетитель
Покинул форум
Сообщений всего: 490
Дата рег-ции: Янв. 2010
Помог: 0 раз(а)
Faraon-san, не подойдёт. Если у просматривемой категории, например, id 9, то ваш запрос также выведет категории 19,91-99 и т.д.
Помогите, пожалуйста.
Faraon-san
Отправлено: 06 Апреля, 2015 - 17:53:12
Посетитель
Покинул форум
Сообщений всего: 318
Дата рег-ции: Сент. 2013
Помог: 8 раз(а)
тогда с лайками, самый простой вариант, можно еще строку с категориями разбить на подстроки по делителю, но так гемора много.
Sail
Отправлено: 06 Апреля, 2015 - 17:55:12
Участник
Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014
Помог: 57 раз(а)
Extazy, можно ещё использовать функцию FIND_IN_SET():
$db->query("SELECT id, title, alt_name, xfields, news_read, comm_num FROM dle_post WHERE approve=1 AND FIND_IN_SET($category_id,category) AND alt_name LIKE '%sezon%' ");
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.