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


Фото
- - - - -

Помогите исправить sql запрос


  • Чтобы отвечать, сперва войдите на форум
5 ответов в теме

#1 question

question
  • Пользователь
  • 241 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 25.01.2019 - 14:44

Нехитрый запрос выводит комментарии, url товара, url и id категории, всё правильно, вот только если у категории несколько id, выводит последнюю, в то время, как нужно первую (короче, где id минимальный, то есть, 0 или 1).

 

SELECT c.id, c.object_id, c.ip, c.name, c.text, c.type, c.date, c.approved, i.filename as image , p.url, p.name product, pc.category_id, cat.url category_url 

FROM s_comments c 

INNER JOIN s_products p ON c.object_id = p.id, s_images i, s_products_categories pc, s_categories cat 

WHERE i.product_id = c.object_id AND c.type='product' AND (c.approved=1 ) AND pc.product_id = p.id AND cat.id = pc.category_id 

GROUP BY c.id 

ORDER BY id DESC LIMIT 0, 14

 

 

 



#2 yr4ik

yr4ik
  • Фрилансер
  • 916 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:Украина Чернигов

Опубликовано 25.01.2019 - 20:13

за построение запроса - 2

за поставление задачи - 2

 

советы:

1) разобраться в использовании join

2) научится правильно ставить вопросы, что бы люди могли давать ответы. То с вашего 1го предложения - получите больше вопросов чем ответов.  Из того что написали:

 

вот только если у категории несколько id

у категорий не может быть несколько ид. ид всегда 1

 

выводит последнюю, в то время, как нужно первую (короче, где id минимальный, то есть, 0 или 1)

 

вообще из всего, тяжело что то уловить. лучше бы наисали просто:

 

на странице товара хочу вывести комментарии к похожим товарам по категории. или что вы там хотите...



#3 question

question
  • Пользователь
  • 241 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 25.01.2019 - 21:26

Это моя невнимательность. Не id, а position, конечно же.

Мне нужно выбирать только тот id, где position минимален.



#4 question

question
  • Пользователь
  • 241 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 25.01.2019 - 22:05

Если перед GROUP BY поставить 

 

AND pc.position = 0
 

То выводится нормально. Проблема в том, что в некоторых случаях категории с position = 0 нету.



#5 question

question
  • Пользователь
  • 241 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 25.01.2019 - 22:10

Задача. Вывести последние 14 комментариев с названием товара, который комментировали, его url, первым изображением, url его категории.

SQL запрос с этим справляется, но категорию выводит последнюю (с максимальным position), в то время как нужно с минимальным. 

ASC/DESC LIMIT 1 в данном случае ставить некуда, MIN/MAX также неприменимы.



#6 question

question
  • Пользователь
  • 241 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Россия

Опубликовано 26.01.2019 - 00:04

Вставляю перед group by такое

 

AND pc.position = (select MIN(position) FROM s_products_categories where product_id = c.object_id)

 

Всё работает. Но какой-то несуразный запрос получился. Как бы его оптимизировать?






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых