我有2个mysql表,一个包含用户详细信息,第二个包含用户看到的所有页面(1:N)
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)
我知道可以加入2个表格,但我有点困惑如何获得第一个和最后一个日期时间,以及来自"页面的第一个网址"表...
SELECT * FROM users, pages WHERE users.id = pages.uid
我认为使用GROUP BY / MIN(pages.datetime),MAX(pages.datetime)但我不知道在哪里使用它,以及我如何获得第一页.url
答案 0 :(得分: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