如何执行此SQL查询?

时间:2013-05-23 17:44:04

标签: php sql

我有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}'

3 个答案:

答案 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";