Перейти к содержимому


Партнерская программа Kredov

Вывод статьи в нескольких категориях

#1 bo4kov

bo4kov
  • Пользователь
  • 26 сообщений
  • Репутация: 0
0

Отправлено 05 Май 2015 - 16:57

Здравствуйте! Я хочу реализовать вывод статей по категориям, при том что статья может быть в нескольких категориях. 

В общем вывод статьи (которая относится к одной категории) работает, вот код: 

$category = 1; // id категории 
$query = "(SELECT * FROM `articles` WHERE cat_articles = $category)"; // cat_articles - id категории к которой относится статья 
$res = mysql_query($query); 

$products = array(); 
 while($row = mysql_fetch_assoc($res)){ 
   $products[] = $row; 
} 
print_r($products);

А как сделать вывод статьи которая относится к нескольким категориям, например cat_articles = 1|5|20   ? 
Здесь нужно использовать explode(). Но как все это связать с sql запросом? может нужно делать два запроса?


 

 

  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85
Советую обратить внимание на следующее:
  1. Joomla вывод статей без категорий
  2. Вывод списка похожих статей
  3. Вывод статей сеткой в Wordpress
  4. Не отображаются статьи в категориях
  5. Посчитать количество статей в категории

#2 ShowPrint

ShowPrint
  • Пользователь PRO
  • 1 729 сообщений
  • Репутация: 410

Отправлено 05 Май 2015 - 19:49

Попробуйте cat_articles заключать в "спец.символы" с двух сторон, т.е. для Вашего примера: 

cat_articles = |1|5|20|

 и запрос сформировать следующим образом:

$query = "(SELECT * FROM 'articles' WHERE cat_articles LIKE '|'.$category.'|')";

Если не получится, то почитайте про LIKE в рунете, давно пользовался - точно не помню... В таких случаях точно используется LIKE, сомнения лишь в том как правильно прописать:

'|'.$category.'|'

  • 0
MasterWEBS: третий дом - моё хобби и увлечение... Второй дом: работа - не меньше 12 часов в день...
Первый дом - под охраной: "Осторожно - злая жена!" (дрессировалась долго и надёжно) /*ссылку не просите - не дам!*/


#3 bo4kov

bo4kov
    Topic Starter
  • Пользователь
  • 26 сообщений
  • Репутация: 0

Отправлено 06 Май 2015 - 15:17

@ShowPrint, спасибо большое. Насчет оформления, то вот так у меня работает:

$query = "(SELECT * FROM 'articles' WHERE cat_articles LIKE ('%|" .$category. "|%')";

  • 0

#4 ShowPrint

ShowPrint
  • Пользователь PRO
  • 1 729 сообщений
  • Репутация: 410

Отправлено 06 Май 2015 - 15:25

@bo4kov, вполне логично, почему нет... Рад что смог помочь... Не забывайте "спец.символы" ставить с двух сторон во избежание недоразумений...


  • 0
MasterWEBS: третий дом - моё хобби и увлечение... Второй дом: работа - не меньше 12 часов в день...
Первый дом - под охраной: "Осторожно - злая жена!" (дрессировалась долго и надёжно) /*ссылку не просите - не дам!*/


#5 Ixman

Ixman
  • Пользователь PRO
  • 2 164 сообщений
  • Репутация: 436

Отправлено 06 Май 2015 - 15:29

@ShowPrint,@bo4kov,  LIKE вообще нужно исключить из своего рациона, это гадость будет сильно тормозить при больших объёмах информации  и посещаемости

@bo4kov, а так подробнее бы о том как ваши id храняться, и вообще точнее изложите суть. А вообще делается элементарно

WHERE cat_articles IN ('1','5','20') ... 

И хранить связи статьи с категориями лучше всего в отдельной таблице, если нужно более подробно я могу разжевать


  • 0

#6 bo4kov

bo4kov
    Topic Starter
  • Пользователь
  • 26 сообщений
  • Репутация: 0

Отправлено 06 Май 2015 - 15:29

@Ixman, ну а другой способ решения моей задачи  - это только создавать дополнительную таблицу с id статьи и id категории, а потом с помощью JOIN выводить, так? или есть еще способы? 


  • 0

#7 Ixman

Ixman
  • Пользователь PRO
  • 2 164 сообщений
  • Репутация: 436

Отправлено 06 Май 2015 - 15:35

@bo4kov, да таблица с ID категории и ID статьи но выводится тем же способом что и я показал выше, только там вместо перечисления ID sql запрос, выглядит как-то так

WHERE cat_articles IN (SELECT `cat_id` FROM `article2category` WHERE `art_id` = '1') ... 

  • 0

#8 bo4kov

bo4kov
    Topic Starter
  • Пользователь
  • 26 сообщений
  • Репутация: 0

Отправлено 06 Май 2015 - 15:35

@Ixman,  Ну допустим id категории в статье хранится вот в таком виде 1|2|3|5. В общем у меня пока тестовая таблица так что все можно будет изменить. Так что все таки лучше использовать доп. таблицу? или вложенный запрос IN() подойдет? Что быстрее работает и не тормозит сайт?


  • 0

#9 Ixman

Ixman
  • Пользователь PRO
  • 2 164 сообщений
  • Репутация: 436

Отправлено 06 Май 2015 - 15:36

Данный способ работает безупречно, опробовано лично мное не раз


  • 0

#10 bo4kov

bo4kov
    Topic Starter
  • Пользователь
  • 26 сообщений
  • Репутация: 0

Отправлено 06 Май 2015 - 15:39

@Ixman, спасибо, ну тогда пойду создавать таблицу  


  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru