2011-07-04 4 views
2

어쩌면 도움을 줄 수 있습니다.이 케이스 쿼리를 사용하고 있습니다. MySQL과 함께 가중치를 부여하려고합니다. 그게 뭐가 잘못 됐어?이 경우 SQL 쿼리에 문제가 있습니까?

SELECT * 
    FROM cronjob_reloaded 
    WHERE site IN ('site1.com', 'site2.com') 
ORDER BY (CASE site 
      WHEN 'site1.com' THEN 0.2 
      WHEN 'site2.com' THEN 0.8 ) * RAND() DESC 
    LIMIT 0 , 30 

MySQL은 말했다 : 문서

1064 - 당신은 당신의 SQL 구문에 오류가 있습니다; 라인 여기에 4

답변

3

에서 'DESC LIMIT 0, 30 * RAND())'근처에 사용할 수있는 권리 구문에 대한 MySQL 서버 버전에 해당하는 설명서를 확인하는 것은 CASE의 올바른 구문입니다

SELECT * 
FROM cronjob_reloaded 
WHERE site IN ('site1.com', 'site2.com') 
ORDER BY (
    CASE 
    WHEN site = 'site1.com' THEN 0.2 
    WHEN site = 'site2.com' THEN 0.8 
    END 
) * RAND() DESC 
LIMIT 0 , 30 
+0

+1 상호 존경 – Bohemian

+0

타이, 그것을 작동합니다. 나는 내 데이터베이스에서 사이트 1에서 많은 항목을 얻었습니다. 사이트 1에서 20 % 만 얻고 나머지는 site2에서 가져 오는 SQL을 만들려고합니다. – webmasters

3

CASE는 END 폐쇄해야합니다

CASE site 
WHEN 'site1.com' 
THEN 0.2 
WHEN 'site2.com' 
THEN 0.8 
END -- Added this END to your query's CASE 
0

한 가지 문제는 당신이 최종 CASE를 사용하지 않은 것입니다.

변경 :

CASE site 
WHEN 'site1.com' 
THEN 0.2 
WHEN 'site2.com' 
THEN 0.8 
) 

사람 :

CASE site 
WHEN 'site1.com' 
THEN 0.2 
WHEN 'site2.com' 
THEN 0.8 
END CASE 

가 참조 : 매우 MySQL site