2009-03-30 4 views
1

뉴스 기사 데이터베이스에서 선택하는 것이므로 가능하면 한 번만 수행하는 것이 좋습니다. 결과에서 첫 번째 결과에만 적용되는 정렬 기준이 필요합니다.첫 번째 결과 뒤에 정렬 기준이 변경됩니다.

필자의 경우 첫 번째 결과에는 이미지가 있어야하지만 나머지는 이미지 상태를 신경 쓰지 않고 정렬해야합니다.

MySQL 쿼리에서 일종의 조건문 또는 사용자 변수로 할 수있는 것이 있습니까?

답변

4

하나의 쿼리처럼 보이는 쿼리를 관리하더라도 두 개의 쿼리가 논리적 일 것입니다. 실제로 하나의 쿼리를 작성해야한다면 MySQL UNION을보십시오 (하지만 여전히 2 개의 논리적 쿼리가됩니다). 첫 번째 이미지는 한도로 나머지는 나머지 두 번째 이미지로 결합 할 수 있습니다.

+0

작은 코드 샘플은 어떻게됩니까? – Martin

1

실제로는 2 개의 쿼리 (테이블이 정렬되어야하는 첫 번째 쿼리와 두 번째 정렬되지 않은 쿼리)가 가능하므로 처음에는 LIMIT 1 인 2 개의 쿼리를 사용할 수 있습니다.

2

이렇게하면 맨 위에 이미지가있는 기사가 표시됩니다.

SELECT 
    id, 
    title, 
    newsdate, 
    article 
FROM 
    news 
ORDER BY 
    CASE WHEN HasImage = 'Y' THEN 0 ELSE 1 END, 
    newsdate DESC 

"첫 번째 결과"를 더 가깝게 정의하지 않는 한. 이 쿼리는 이미지가있는 기사를 선호하며 끝에없는 기사는 끝에 표시됩니다.

또 다른 변형 (르 dorfier, 어떤 이유에 대한 그의 대답을 삭제 사람 덕분에)이 될 것이다 :

SELECT 
    id, 
    title, 
    newsdate, 
    article 
FROM 
    news 
ORDER BY 
    CASE WHEN id = (
    SELECT MIN(id) FROM news WHERE HasImage = 'Y' 
) THEN 0 ELSE 1 END, 
    newsdate DESC 

이것은 초기 정렬 이미지와 글 (가정 MIN (ID 것은) "최초"를 의미) 정상에.

+0

첫 번째 결과뿐만 아니라 전체 목록을 정렬합니다. – ceejayoz

+0

"정렬"은 어떻게 정의합니까? – Tomalak

+0

원래의 질문에서 언급했듯이, 나는 기사 상태를 기준으로 전체 기사 목록을 정렬하지 않기를 원합니다. * 첫 번째 기사가 이미지가있는 기사가되기를 원하지만, 두 번째 기사 (그리고 이후의 모든 기사)에 대해서는 이미지 상태를 무시할 것을 원합니다. 전혀 고려해서는 안됩니다. – ceejayoz

관련 문제