我有Flash游戏网站,允许用户“喜欢”或“不喜欢”特定游戏。当用户选择“喜欢/不喜欢”时,我的php应用程序会将一条记录插入到名为likes
的表中,该表包含以下列:
game_id
- (所选游戏的ID)time
- (用户操作的时间,按照php中的时间函数)type
- (动作类型:“喜欢”或“不喜欢”)我应该如何在上周即type ='like'
中获取拥有最多“喜欢”即week(time()-60*60*24*7)
的10个游戏的ID。然后按每场比赛最多的“喜欢”排序结果?
这是我尝试使用的查询,但它仍然没有帮助。因为它只提取所有like
个记录,而不是总计。
SELECT `game_id`
FROM `likes`
WHERE `type` = 'like'
AND `time` > '{$time}'
答案 0 :(得分:0)
假设时间列是日期列,您可以执行此操作。
$time = date("Y-m-d", time() - (60*60*24*7));
或更简洁
$time = date("Y-m-d", strtotime("one week ago"));
并且查询应该是
SELECT `game_id`, count(*) as num_likes
FROM `likes`
WHERE `type` = 'like'
AND `time` > '{$time}'
GROUP BY game_id
ORDER BY num_likes desc
LIMIT 10;
答案 1 :(得分:0)
// Php
$time = date_sub(now() ,interval 7 day); // Week
// SQL
SELECT `game_id` FROM `likes` WHERE `type` = 'like' AND `time` > '{$time}' LIMIT 10
你可能需要使用date_sub来使它恰到好处,但希望这会让你走上正确的轨道。 LIMIT 10将其限制为10个结果,这可能是您所需要的全部。
答案 2 :(得分:0)
您可以使用:
$timestamp = strtotime("one week ago");
$sql ="SELECT game_id,
COUNT(type) as like_count
FROM likes
WHERE type = 'like' AND `time` > ".$timestamp."
GROUP BY type
ORDER BY like_count DESC
LIMIT 0,10";