1

我正在玩 2 个数据库表。一个是用户表,其中包含用户详细信息,如全名和活动(用户是否活动)列。另一个是包含每个用户的任务详细信息的任务表。所以任务表有名为 UserID 和 StartTime 的列。以下查询将显示昨天输入任务的所有用户详细信息。

$today = mktime(0,0,0);
$yesterday = $today - 86400;
$res = $db->fetchAll("SELECT DISTINCT tasks.UserID,user.full_name FROM `tasks` JOIN `user` ON tasks.UserID=user.id WHERE user.active=1 AND tasks.StartTime > ".$db->quote($yesterday,'integer')." AND tasks.StartTime < ".$db->quote($today,'integer'));

我需要找出昨天没有输入任务的用户详细信息。如何修改上述查询?

谢谢!

4

2 回答 2

0

How about getting just the yesterday records from tasks table before joining?

"SELECT DISTINCT tasks.UserID, user.full_name FROM `user` LEFT JOIN (
    select * from `tasks` where tasks.StartTime > ".$db->quote($yesterday,'integer')."
    ) `tasks_from_yesterday` 
    ON user.id=tasks_from_yesterday.UserID WHERE user.active=1 AND tasks_from_yesterday.StartTime = NULL"
于 2012-11-05T07:23:39.403 回答
0

尝试这样的事情:

SELECT DISTINCT tasks.UserID, user.full_name FROM `user` LEFT JOIN `tasks` 
ON user.id=tasks.UserID WHERE user.active=1 AND tasks.StartTime = NULL;

当 MySQL 在任务表中找不到用户时,它应该返回 NULL。

于 2012-11-02T01:15:12.930 回答