MySQL DISTINCT на один столбец и левое соединение

0

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

  • 0
    если вы хотите отличный cat_id, то какое значение id вы хотите представить. например, для cat_id 42, какой идентификатор вы хотите 530 или 528. Присоединение требуемого вывода будет полезно в понимании вашего вопроса
  • 0
    группировать по cat_id?
Показать ещё 3 комментария
Теги:
left-join
distinct

2 ответа

2
Лучший ответ

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

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

  • 0
    Да, извините, я хочу добавить последние изображения из разных категорий. У меня ошибка SQL из вашего запроса: синтаксическая ошибка в строке 6 рядом с io__image_cat_hext.cat_id FROM io__image_cat_hext
  • 0
    @LondonSmith: я пропустил запятую. Вот почему вы должны включить DDL таблиц в свои вопросы. Я мог бы проверить это тогда. Во всяком случае, см. Мое редактирование. Я также изменил min на max как понимаю, что вы можете сказать «последний добавленный».
Показать ещё 3 комментария
1

Если вы хотите только значения 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
    Да, это тоже хорошо :)
  • 0
    Но не давая мне последние, заказанные io__image.date desc. Битовый запрос @stick дает последние.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню