MySQL DISTINCT на один столбец и левое соединение - PullRequest
0 голосов
/ 26 мая 2018

У меня есть 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

Ответы [ 2 ]

0 голосов
/ 26 мая 2018

Если вам нужны только значения 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;

Без показа желаемых результатов это выглядит как наиболее подходящий для вашего вопроса.

0 голосов
/ 26 мая 2018

Трудно понять, что именно вы подразумеваете под 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;

Это даст вам только изображение с самым высоким идентификатором для каждой категории.Если идентификаторы автоматически увеличиваются, это изображение вставлено совсем недавно.

...