2015-03-14 4 views
2

У меня есть 2 MySQL таблицы, одна с деталями пользователей, а второй со всеми страницами, которые пользователи видели (1: N)соединить 2 таблицы MySQL и получить первую и последнюю дату

TABLE "users" 
id int(10) auto_increment primay 
ip varchar(15) 
lang char(2) 
... 

TABLE "pages" 
id int(10) auto_increment primay 
uid int(10) index 
datetime datetime 
url varchar(255) 

Я знаю, является possibile присоединиться к 2 таблицы, но я немного запутался, как получить первый и последний DateTime, и первый URL из таблицы «страниц» ...

SELECT * FROM users, pages WHERE users.id = pages.uid 

Я думаю, что с GROUP BY/MIN (pages.datetime), MAX (pages.datetime), но я понятия не имею, где его использовать, и как я могу получить первые pages.url

ответ

3

Как вы упомянули вы должны использовать Group by с MIN & MAX агрегатной функции, чтобы найти первый и последний datetime за user.

Также не используйте запятую присоединиться синтаксис, который является довольно старым и не очень читаемый использование собственно INNER JOIN синтаксис

SELECT U.ID, 
     MIN(pages.datetime) as First_date, 
     MAX(pages.datetime) as Last_date 
FROM users U 
INNER JOIN pages P 
     ON U.id = P.uid 
Group by U.ID 

Если вы хотите, чтобы увидеть другую информацию, такую ​​как первый посетил url и т.д .. Тогда вам могут присоединиться к приведенному выше результату в основную таблицу, чтобы получить соответствующую информацию.

select A.uid,A.url First_URL,C.url as Last_url,First_date,Last_date 
from pages A 
INNER JOIN 
(
SELECT U.ID, 
     MIN(pages.datetime) as First_date, 
     MAX(pages.datetime) as Last_date 
FROM users U 
INNER JOIN pages P 
     ON U.id = P.uid 
Group by U.ID 
) B 
ON A.ID =B.ID 
and A.datetime = B.First_date 
INNER JOIN pages C 
on C.ID =B.ID 
and C.datetime = B.Last_date 
+0

спасибо, это работает, но это очень трудно, чтобы добавить другие поля, как pages.url (чтобы получить первую страницу пилу), граф (*) (чтобы получить сколько страниц каждый пользователь посетил) я думаю, что в этом случай проще выполнить запрос separete для каждого пользователя – ipel

+0

@ipel - обновленная проверка сейчас –

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