2012-02-04 3 views
1

Я пробовал работать с некоторыми предыдущими ответами, но они не имеют большого смысла.Выбор одной строки из объединенной таблицы в строке основной таблицы

У меня есть две таблицы, одна из «групп», представляющая группы людей реального мира, и одно из «событий», представляющих собрания группы.

У меня есть ужасно простой запрос, который выбирает группы, показывает их в списке на веб-сайте и отдельный запрос на странице профиля группы, в котором перечисляются их предстоящие встречи, и я не уверен, какой метод используйте, чтобы добавить «следующее собрание» в список групп, в идеале его нужно вернуть в качестве другого столбца в запросе MySQL.

Я был в порядке с объединениями ранее, но ограничение количества объединенных результатов на один, на строку в первой таблице не кажется простым.

Простые советы о том, какая техника будет работать, чтобы показать это?

Спасибо!

Грубая схема:

CREATE TABLE `groups` (
    `id` varchar(12) NOT NULL, 
    `title` varchar(30) NOT NULL, 
    PRIMARY KEY (`slug`) 
) 

CREATE TABLE `events` (
    `id` int(6) NOT NULL AUTO_INCREMENT, 
    `group` varchar(20) NOT NULL, 
    `title` varchar(50) NOT NULL, 
    `start` datetime NOT NULL, 
    `finish` datetime NOT NULL, 
PRIMARY KEY (`id`) 
) 
+1

, чтобы получить рабочий ответ вам нужно, чтобы показать структуру таблицы и запросы у вас уже есть! – Yahia

+0

Было бы проще, если бы вы разместили некоторые определения схем. –

+0

Я попросил технику, а не кто-то, чтобы сделать это для меня, но теперь я добавлю –

ответ

0

Схема вы представить не является последовательным и вы не предоставили свои запросы ...

Чтобы дать какой-то ответ, который я сделал предположение, что groups.id = events.group.

Чтобы показать следующее событие, которое вы могли бы сделать что-то похожее на это:

SELECT G.*, M.EVENT FROM GROUPS G LEFT JOIN 
(
SELECT X.GROUP, MIN (X.ID) EVENT 
FROM EVENTS X 
INNER JOIN (SELECT E.GROUP G, MIN (E.START) S FROM EVENTS E WHERE E.START > NOW() GROUP BY E.GROUP) Y 
ON X.GROUP = Y.G AND X.START = Y.S 
GROUP BY X.GROUP 
) M ON G.ID = M.GROUP 
0

Хорошо, вот ответ с техникой, а не раствор :-)

Этот код выбирает каждые две строки из дочерней таблицы для каждой родительской строки, отсортированных по sort колонке.

SELECT 
    parent.id, parent.name, 
    c1.id, c1.name 
FROM parent 
JOIN child c1 ON c1.parent_id = parent.id 
LEFT JOIN child c2 ON c2.parent_id = c1.parent_id AND c2.sort < c1.sort 
GROUP BY parent.id, parent.name, c1.id, c1.name 
HAVING COUNT(c2.id) < 2 
ORDER BY parent.name; 

Взятый from here.

Смежные вопросы