Выберите последние события со всеми действиями в списке SQL - PullRequest
3 голосов
/ 24 февраля 2012

У меня есть база данных, в которой будут храниться события. Каждое событие имеет разные виды деятельности. База данных сделана так (я знаю, что это не лучший дизайн базы данных, но я работаю с тем, что мне дали):

eventID | date       | eventname | activity
___________________________________________
0001    | 01/01/2012 | name1     | activty1
0002    | 01/01/2012 | name1     | activty2
0003    | 01/05/2012 | event2    | activty1
0004    | 01/05/2012 | event2    | activty2
0005    | 01/07/2012 | name1     | activty1

Одно и то же событие может иметь несколько действий. Единственный способ получить все записи из события (действия) - это столбец с именем события.

Я пытаюсь получить последние 20 событий со всеми своими действиями. Поэтому я не могу просто выбрать 20 строк (используя LIMIT, так как это не даст мне 20 событий каждый раз, поскольку некоторые события имеют 2 действия, а другие 10).

Я не могу использовать SELECT DISTINCT eventname, потому что некоторые события имеют одно и то же имя в разные даты. Мне нужно иметь отдельное имя события, только если дата отличается.

Я потерян для идей.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 24 февраля 2012
SELECT
  *
FROM
  event
INNER JOIN
(
  SELECT   eventName, Date
  FROM     events
  GROUP BY eventName, Date
  ORDER BY Date DESC
  LIMIT    20
)
  AS last_20_events
    ON  last_20_events.eventName = events.eventName
    AND last_20_events.Date      = events.Date
0 голосов
/ 25 февраля 2012
SELECT eventName, date, 
 GROUP_CONCAT(activity ORDER BY activity SEPARATOR ', ') 
FROM events
GROUP BY eventName, date
ORDER BY date desc
LIMIT 20

В данный момент у меня нет доступа к БД MySQL, поэтому я не смог проверить это. Этот ответ основан на других принятых ответах по SO (поиск group_concat)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...