2013-06-12 3 views
0

У меня есть таблица любит/не любит на игру: id, game_id, type (как/нелюбовь), timeКак сделать заказ по этому запросу?

Таблица Пример: Image Link

Этот код дает мне последнюю неделю игр имели любит, заказ их любит кол-во:

$limit = 10; 
$time = _time() - 60*60*24*7; 
$games_id = array(); 
$games_id_query = $this->db->execQuery("SELECT `game_id`, count(*) as `likes_count` FROM `likes` WHERE `type` = 'like' AND `time` > '{$time}' group by `game_id` order by `likes_count` DESC LIMIT {$limit}"); 
$games_id_num = $games_id_query->num_rows; 
if($games_id_num > 0) { 
    while($row = $games_id_query->fetch_object()) { 
     unset($row->likes_count); 
     $games_id[] = (array) $row; 
    } 
} 

Мне нужно добавить к этому коду. Я хочу еще один заказ, и это будет неприязнь к этому игроку_ид, ASC.

Как мне это сделать? с SQL только ... спасибо большое!

ответ

0

Вы, вероятно, хотите что-то вроде этого:

SELECT `game_id`, 
    SUM(IF(`type` = 'like', 1, 0)) AS likes_count, 
    SUM(IF(`type` = 'dislike', 1, 0)) AS dislikes_count 
FROM `likes` 
WHERE `time` > '{$time}' 
GROUP BY `game_id` 
ORDER BY `likes_count` DESC, `dislikes_count` ASC 
LIMIT {$limit} 

Это, как говорится, пожалуйста, смотрите в использовании подготовленных заявлений и параметризованных запросов вместо прямого вложения ваших PHP переменные в SQL.

См. Этот вопрос для получения дополнительной информации: How can I prevent SQL injection in PHP?

-1

Переход от DESC к ASC, это то, что вы хотите?

SELECT game_id, count(*) as likes_count 
    FROM likes 
    WHERE type = 'like' 
    AND time > '{$time}' 
    group by game_id 
    order by likes_count ASC LIMIT {$limit} 
Смежные вопросы