-4

我有一个 Flash 游戏网站,允许用户“喜欢”或“不喜欢”特定游戏。当用户选择“喜欢/不喜欢”时,我的 php 应用程序将一条记录插入到一​​个名为的表中,该表likes包含以下列:

  • game_id- (所选游戏的ID)
  • time- (用户操作的时间,根据 php 中的时间函数)
  • type- (动作类型:“喜欢”或“不喜欢”)

type ='like'我应该如何获取上周 ie 中“喜欢”最多的 10 款游戏的 id week(time()-60*60*24*7)。然后按每场比赛的最大“喜欢”数对结果排序?

这是我尝试使用的查询,但它仍然没有帮助。因为它只获取所有like记录,而不是总数。

    SELECT `game_id` 
    FROM   `likes` 
    WHERE  `type` = 'like' 
    AND    `time` > '{$time}'
4

3 回答 3

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";
于 2013-05-23T18:30:45.033 回答
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;
于 2013-05-23T18:24:38.080 回答
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 个结果,这可能就是您所需要的。

于 2013-05-23T18:27:09.000 回答