每组最多n个多表

时间:2011-06-27 13:12:51

标签: php mysql

我知道有很多同样的问题,但我很难让它在多个表连接上工作。我有3张桌子

用户信息

user_id | firstname | lastname

子编号

subnumber | fkuserid

交易

transid | fksubnumber | expires | transdate

继承人我工作的部分

SELECT *
FROM (SELECT *
FROM subtransactions
WHERE Expires < now()
ORDER BY NewSubTrans DESC) AS s
GROUP BY FKSubNum

我要做的是选择订阅已过期的所有用户。确定用户是否过期我从事务表中提取最后一个事务及其子号,fk字段是指向其他表的链接。

2 个答案:

答案 0 :(得分:2)

根据您的描述,我认为您根本不需要任何小组。只需使用以下两个连接即可尝试:

SELECT user_id, firstname, lastname
FROM
 userinfo
  JOIN subnumbers ON userinfo.user_id = subnumbers.fkuserid
  JOIN transaction ON subnumbers.subnumber = transaction.fksubnumber
WHERE transaction.expires < NOW()

编辑如果按照以下评论中的建议返回多行,请在选择列表中使用DISTINCT

SELECT DISTINCT user_id, firstname, lastname
  -- etc...

答案 1 :(得分:1)

这将获得所有user_ids

select distinct(user_id) from userinfo
join subnumbers on userinfo.user_id = subnumbers.fkuserid
join transaction on transaction.fksubnumber = subnumbers.subnumber
where transaction.expires < NOW()

获取完整的用户数据

select * from user where user_id in
(
select distinct(user_id) from userinfo
join subnumbers on userinfo.user_id = subnumbers.fkuserid
join transaction on transaction.fksubnumber = subnumbers.subnumber
where transaction.expires < NOW()
)