我有一个非常复杂的查询(对我来说),我不确定如何执行,虽然我已经尝试过。我有一个
user table
license table
FK user.id位于license.parent_id和license.child_id
item table
FK是user.id,可在item.user_id
我需要计算item table
中属于用户的每个用户及其许可证尚未过期的被许可人的项目数。
到目前为止,这是我所拥有的。
SELECT *
FROM
(SELECT id as user_id, date_expired as user_date_expired
FROM user
WHERE id IN (13, 15)
) AS user
JOIN
(
SELECT COUNT(id) as item_count FROM item WHERE date_added > DATE_SUB(NOW(), INTERVAL 300 DAY) AND date_expired > CURDATE()
) AS item
目前返回:
user_id
user_date_expired
item_count
13
2013-10-05 20:23:31
24
15
2013-08-08 22:21:09
24
感谢任何帮助。
强尼
答案 0 :(得分:1)
从您提供的信息中可以看出,不需要许可证表。
这是用用户和项目表之间的正确连接结构重写的查询。
SELECT U.ID AS user_id
,U.date_expired AS user_date_expired
,COUNT(I.id) AS item_count
FROM USER U
INNER JOIN
ITEM I
ON I.user_id = U.id
WHERE U.id IN (13,15)
AND I.date_added > DATE_SUB(NOW(), INTERVAL 300 DAY)
AND I.date_expired > CURDATE()
GROUP BY
U.ID
,U.date_expired
答案 1 :(得分:0)
跳过子查询并对所有三个表使用普通连接,然后为每个结果行上应该相等的所有列添加group by
子句。