1

私は2つのデータベーステーブルで遊んでいます。1つは、フルネームやアクティブな(ユーザーがアクティブかどうかに関係なく)列などのユーザーの詳細を含むユーザーテーブルです。もう1つは、各ユーザーのタスクの詳細を含むタスクテーブルです。したがって、タスクテーブルには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

次のようなものを試してください。

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 に答える
0

参加する前に、タスクテーブルから昨日のレコードだけを取得するのはどうですか?

"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 に答える