У меня есть SQL-запрос с левым соединением:
SELECT i.id
, i.user_id
, i.date
, h.cat_id
FROM io__image i
LEFT
JOIN io__image_cat_hext h
ON h.image_id = i.id
WHERE i.home_granted >= 1
AND user_id = 40
ORDER
BY i.date DESC
Результат выглядит так:
id user_id date cat_id
530 40 2018-05-12 20:45:54 42
528 40 2018-05-11 22:59:17 42
518 40 2018-05-11 17:22:30 42
508 40 2018-05-09 13:45:40 37
504 40 2018-05-06 22:40:31 37
492 40 2018-05-02 21:21:20 37
490 40 2018-05-02 16:16:09 36
481 40 2018-05-02 15:08:35 36
Можно ли получить DISTINCT cat_id? Я пытался с группой:
SELECT i.id
, i.user_id
, i.date
, h.cat_id
FROM io__image i
GROUP
BY h.cat_id
LEFT
JOIN io__image_cat_hext h
ON h.image_id = i.id
WHERE i.home_granted >= 1
AND user_id = 40
ORDER
BY i.date DESC
Но я получаю эту ошибку:
Синтаксис рядом с "LEFT JOIN" io__image_cat_hext ON io__image_cat_hext.image_id = io__image.id WHER "в строке 4
Трудно понять, что именно вы подразумеваете под DISTINCT cat_id
в этом контексте. Может быть, вы ищете что-то вроде этого?
SELECT io__image.id,
io__image.user_id,
io__image.date,
io__image_cat_hext.cat_id
FROM (SELECT max(io__image_cat_hext.image_id) image_id,
io__image_cat_hext.cat_id
FROM io__image_cat_hext
GROUP BY io__image_cat_hext.cat_id) io__image_cat_hext
INNER JOIN io__image
ON io__image.id = io__image_cat_hext.image_id
ORDER BY io__image.date DESC;
Это даст вам только изображение с самым высоким идентификатором для каждой категории. Если идентификаторы автоматически увеличиваются, то последнее изображение было вставлено.
min
на max
как понимаю, что вы можете сказать «последний добавленный».
Если вы хотите только значения cat_id
, вы можете сделать следующее:
select h.cat_id
from io__image i join
io__image_cat_hext h
on h.image_id = i.id
where i.home_granted >= 1 and i.user_id = 40
group by h.cat_id
order by max(i.date) desc;
Без показа результатов, которые вы хотите, это кажется наилучшим образом подходящим для вашего вопроса.