私はこれらのテーブルを持っています:
users
-----
id INT
name VARCHAR(20)
email VARCHAR(40)
user_fans
----------
id INT
user_id INT /* linked to users.id */
fan_id INT /* linked to users.id */
time_created INT /* unix timestamp */
次のクエリを使用してusers
名前が付けられた追加のフィールドを持つテーブルからすべての行を取得できますnum_fans
SELECT u.id, u.name, u.email, COUNT(f.id) AS num_fans
FROM users u
LEFT JOIN user_fans f ON u.id=f.user_id
GROUP BY u.id, u.name, u.email
ORDER BY num_fans DESC
問題は、私がnum_fans
時間の範囲内で取得する必要があるということです。このクエリを試しました
SELECT u.id, u.name, u.email, COUNT(f.id) AS num_fans
FROM users u
LEFT JOIN user_fans f ON u.id=f.user_id
WHERE f.time_created > UNIX_TIMESTAMP('2012-5-1 00:00:00')
GROUP BY u.id, u.name, u.email
ORDER BY num_fans DESC
ただし、上記のクエリでは、すでにファンがいるユーザーのみが返されます。残りのユーザーもnum_fans=0で返されるようにします。
ご協力いただきありがとうございます。