2013-05-23 2 views
-4

나는 사용자가 특정 게임을 "좋아"하거나 "싫어하는"것을 허용하는 플래시 게임 웹 사이트를 운영합니다. 사용자가 선택 "/ 싫어하는처럼"내 PHP 응용 프로그램에는 다음과 같은 열이 포함 likes라는 이름의 테이블에 레코드를 삽입하는 경우 :이 SQL 쿼리를 실행하는 방법은 무엇입니까?

  • game_id - (선택한 게임의 ID)
  • time - (시간을 PHP에서 사용자 행동, 시간 당 기능)
  • type - (작업 유형 : "와 같은"또는 "싫어")

가 어떻게 가장 "좋아하는을 가진 10 개 경기의 id의 페치한다 "즉지난주에, 즉 week(time()-60*60*24*7)입니다. 그런 다음 결과를 게임 당 최대 '좋아요'수로 정렬 하시겠습니까?

사용하려고 시도한 쿼리는 여기에 있지만 도움이되지 않습니다. 합계가 아닌 like 개의 레코드 만 가져옵니다.

+3

우리가 더 나은 당신이 뭔가를 시도하는 경우 당신을 도울 수 있습니다. – karthikr

+0

추가했습니다. 지금 게시글을 확인하십시오. 덕분에 – user2400053

+0

mysql? 신탁? DB2는? mssql? – rcpayan

답변

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; 
+0

실제로 나는 시간, 날짜 없음을 사용하고 있습니다. 하지만 문제는 없습니다. 가장 좋아하는 게임을'games_id '10 개 얻어야합니다. –

+0

내 대답을 확인하십시오. :) –

+0

@ Just Asking 업데이트 된 쿼리는 상품을 제공해야합니다 – Orangepill

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 개의 결과로 제한하며, 필요한 모든 것일 수 있습니다.

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"; 
+0

나는 그것을 시도했다. id 1은 1을 가지고 있고 id 2는 1을 가졌습니다. id 1에 2 개의 likes가 있습니다 (그리고 id 2는 가져 오지 않았습니다). 그것을 고치는 방법? –

+1

은 'ORDER BY like_count DESC'여야합니다. – Orangepill

관련 문제