Как исправить этот SQL-запрос?

У меня есть сайт флеш-игр, который позволяет пользователям «любить» или «не любить» определенную игру. Когда пользователь выбирает «like / dislike», мое приложение php вставляет запись в таблицу с именем likes которая содержит следующие столбцы:

  • game_id – (идентификатор выбранной игры)
  • time – (время действия пользователя, за функцию времени в php)
  • type – (тип действия: «like» или «dislike»)

Как я должен получить идентификатор из 10 игр, имеющих самые «понравившиеся», т. Е. type ='like' , в последнюю неделю, т.е. week(time()-60*60*24*7) . Затем закажите результаты по наибольшему количеству «симпатий» за игру?

Вот запрос, который я пытался использовать, но он все равно не помогает. Поскольку он извлекает только все like записи, а не итоговые значения.

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

Related of "Как исправить этот SQL-запрос?"

 // 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 результатов, которые могут быть все, что вам нужно.

Предполагая, что столбец времени является столбцом даты, вы можете это сделать.

  $time = date("Ymd", time() - (60*60*24*7)); 

или более кратко

  $time = date("Ymd", 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; 

Вы можете использовать:

 $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";