MYSQL объединить с сортировки и группы, выбрав элемент для отображения - PullRequest
1 голос
/ 18 марта 2012

У меня 2 таблицы, evt и content.content - это ссылка на evt, бросающая столбец content_evt_fk (чтобы упростить его, вы можете заменить evt на статью, а content на комментарий для базы данных блога).

Я пытаюсь сделать так, чтобы в одном запросе, идентификатор evt, имя evt, номер содержимого, связанного с ним, а также идентификатор и текст последнего вставленного содержимого, связанного с этим evt.

здесь представлен код:

    SELECT 
    `evt`.`evt_id`,
    `evt`.`name`,
    `content`.`content_id`,
    `content`.`content_text`,
    count(*) as `evt_cont`
FROM
    `t_evt` as `evt`,
    `t_content` AS `content`
WHERE
    `evt`.`evt_id` = `content`.`content_evt_fk`
group by `evt_id`
ORDER BY `content`.`content_id` DESC

Проблема в том, что отправленный content_text не тот, который был добавлен последним, а тот, который был для первой вставленной строки.Я попытался добавить Max () в запрос, но это не помогло.

Любая подсказка?

РЕДАКТИРОВАТЬ: Пример данных

скажем, у меня есть evt под названием"pocket" и 3 связанных содержимого, введенных в следующем порядке ("1-cake", "2-chocolate", "3-sweets").

Результат моего запроса

evt_id  name    content_id  content_text    evt_cont
149         pocket  112         1-cake          3

Что бы я хотел иметь:

  evt_id    name    content_id  content_text    evt_cont
    149         pocket  115         3-sweets            3

1 Ответ

1 голос
/ 18 марта 2012

Я не работаю с MySql, поэтому, возможно, есть лучшие способы сделать это. Самый простой способ - присоединить производную таблицу max (представляющий интерес порядок столбцов, здесь content_id) по ключу (здесь content_evt_fk) к исходной таблице, отфильтровывая все записи, кроме последних.

SELECT 
    evt.evt_id,
    evt.name,
    content.content_id,
    content.content_text
FROM t_evt as evt 
  INNER JOIN t_content AS content
     ON evt.evt_id = content.content_evt_fk
  INNER JOIN 
  (
    select content_evt_fk, max(t_content.content_id) content_id
      from t_content
     group by content_evt_fk
  ) last_content
    ON content.content_id = last_content.content_id
--  This is not necessary here, but if you do this sort of thing on 
--  columns other than id, you will have to join this part too
    and content.content_evt_fk = last_content.content_evt_fk
...