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 :: Как вывести статьи из одной категории?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Extazy
Отправлено: 06 Апреля, 2015 - 16:24:08
Post Id


Посетитель


Покинул форум
Сообщений всего: 490
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Ув. гуру!
Что-то не получается у меня.. помогите, пожалуйста.

На новостном сайте каждая статья может находится в нескольких категориях. Информация о категория, в которые добавлена статья, хранятся в mysql в базе в поле через запятую "1,3,13"

Как мне организовать вывод статей в категориях? Не могу понять как составить MYSQL запрос.

У меня получился вот такой запрос (статья может относится и только к 1 категории, поэтому получилось так много LIKE):
PHP:
скопировать код в буфер обмена
  1. $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 запрос вставить... помогите, пожалуйста. Растерялся
 
 Top
Faraon-san
Отправлено: 06 Апреля, 2015 - 16:29:22
Post Id



Посетитель


Покинул форум
Сообщений всего: 318
Дата рег-ции: Сент. 2013  


Помог: 8 раз(а)




Лучше было отдельная таблица с названиями категорий, таблица со статьями и отдельная таблица номер категории и номер статьи.
 
 Top
Мелкий Супермодератор
Отправлено: 06 Апреля, 2015 - 16:32:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Extazy пишет:
Информация о категория, в которые добавлена статья, хранятся в mysql в базе в поле через запятую "1,3,13"

Вы за 5 лет с момента регистрации ни разу не видели, как за подобный бред бьют по рукам?
Нормализуйте схему.


-----
PostgreSQL DBA
 
 Top
Extazy
Отправлено: 06 Апреля, 2015 - 16:32:27
Post Id


Посетитель


Покинул форум
Сообщений всего: 490
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Не могу переделать - так устроен движок Datalife. Помогите, пожалуйста.
 
 Top
Faraon-san
Отправлено: 06 Апреля, 2015 - 16:41:19
Post Id



Посетитель


Покинул форум
Сообщений всего: 318
Дата рег-ции: Сент. 2013  


Помог: 8 раз(а)




попробуй:
PHP:
скопировать код в буфер обмена
  1. $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%'");
 
 Top
Extazy
Отправлено: 06 Апреля, 2015 - 17:21:00
Post Id


Посетитель


Покинул форум
Сообщений всего: 490
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Faraon-san, не подойдёт. Если у просматривемой категории, например, id 9, то ваш запрос также выведет категории 19,91-99 и т.д.
Помогите, пожалуйста.
 
 Top
Faraon-san
Отправлено: 06 Апреля, 2015 - 17:53:12
Post Id



Посетитель


Покинул форум
Сообщений всего: 318
Дата рег-ции: Сент. 2013  


Помог: 8 раз(а)




тогда с лайками, самый простой вариант, можно еще строку с категориями разбить на подстроки по делителю, но так гемора много.
 
 Top
Sail
Отправлено: 06 Апреля, 2015 - 17:55:12
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Extazy, можно ещё использовать функцию FIND_IN_SET():
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT FIND_IN_SET('9','19,21,9,99,91,5');

Возвращает номер позиции в искомой строке.
 
 Top
Extazy
Отправлено: 06 Апреля, 2015 - 18:13:42
Post Id


Посетитель


Покинул форум
Сообщений всего: 490
Дата рег-ции: Янв. 2010  


Помог: 0 раз(а)




Sail, спасибо огромное! Вот сработало:

PHP:
скопировать код в буфер обмена
  1. $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%' " );
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB