2012-03-14 2 views
0

테이블에서 일부 뉴스 기사를 선택하기 위해 mysql 쿼리를 수행하려고하는데, 이제는 키가 항상 5 개의 결과가 필요합니다. mysql이이 쿼리로 선택하고이 쿼리로 채 웁니다.

그래서이 절 즉

select * from here where this = 1 
if there is < 5 results then select * from here where this = 2 
limit [how ever many we are short say the first query brings back 3 results this should bring back 2] 

지금 내가이 일을 노동 조합을 사용하여에 있지만, PHP와 다른 쿼리에서 외부의 도움의 예를하지 않고 방문한 경우 서로 내 결과에서 패드로 할 수 있도록 기대했다 내가 가능하다고 생각하지 않는 결과를 계산하려면 PHP를 사용하여 간단히이 작업을 수행 할 수 있다는 것을 알았지 만 결국 그렇게 할 것입니다. 그러나 내가하려는 것은 하나의 mysql 쿼리로 가능합니까? ?

편집 : 또한 날짜를 기준으로 주문해야하지만 그들은 정말이 1 = 여기서 이렇게 날짜별로

위해 5 개까지 얻을 순서에 게시되지 않은 5 패드 그것을 밖으로없는 경우

이 부분의 나머지는 2로 날짜순으로 정렬됩니다.

또 다른 부끄러운 편집 :

은 내가 그냥 테이블과 이전 코더의 데이터가 저를 만드는 재료의 모든 종류를 수행하는 노동 조합을 사용하고 있었다 가정 내 수면 부족했다 ... 롤 바보 같은 질문을

SELECT * 
FROM here 
WHERE this < 5 -- added this WHERE clause based on the idea that there will be at least one item per this 
ORDER BY this ASC, `date` ASC 
LIMIT 5; 

아니면 다시 날짜별로 정렬 된 다섯 개 결과 후입니다 - 그것은

SELECT * 
FROM 
news 
WHERE 
(this = 45 || this= 0) 
AND 
active = '1' 
ORDER BY 
this ASC, 
date_added DESC 
LIMIT 5 
+0

하는 경우가 있었다하더라도에 우리의 질문이 당신이 찾고있는 것을 돌려주지 않으면 결과에 무엇이 잘못된 것인지 설명하십시오. – nnichols

+0

바보 같은 질문을 부탁드립니다.내가 그냥 나에게 뉴스의 SELECT * 수 있어야하는 것보다 더 복잡하다고 생각하고, 테이블과 이전 코더의 데이터 별걸 다 할 조합을 사용하고 있었다 가정 내 수면 부족했다 및 활성화 = '1' BY ORDER이 ASC, DATE_ADDED DESC LIMIT 5 – user1054495

답변

2

방법에 대해 실제보다 더 복잡한 생각 -

SELECT * 
FROM (
    SELECT * 
    FROM here 
    WHERE this < 5 -- added this WHERE clause based on the idea that there will be at least one item per this 
    ORDER BY this ASC, `date` ASC 
    LIMIT 5 
) AS tmp 
ORDER BY `date` ASC 
+0

권자 멋진 생각이지만, 내가 여기서 x = 1 경우 5를 얻을 필요가 (이이 = 0 || 45 =) 거기에 5 거기에 그 중 단지 2가 있다고 말할 필요가 어디 3 ​​x = 2 그들은 또한 날짜별로 정렬됩니다 그래서 SELECT * FROM here 여기서 (x = 1 || x = 2) ORDER BY 날짜 ASC 그렇다면 먼저 x = 2를 반환하고 충분하지 않은 x = 1이면 채우고 싶습니다. SELECT * 여기에서 (x = 1 || x = 2) ORDER BY x ASC, date ASC 도 작동하지 않는 것 같습니다 – user1054495

+0

내 쿼리 (및 @ ManseUK 's)는 원래 질문을 모두 만족시킵니다. 다른 일을하고 싶다면 질문을 더 나은 설명으로 업데이트해야합니다. – nnichols

+0

+1 '주문'과 '제한'이 답입니다. –

1

당신은 어디에 조항 및 사용 제한을 결합 할 수 있습니다 :

select * FROM here WHERE this = 1 OR this = 2 ORDER BY this LIMIT 5 

this이는 다시 5 개 레코드를 가져올 것 1와 동일한 15 개 기록 ...

+1

'ORDER BY'가'WHERE this = 1'의 결과를 먼저 얻길 원할 것입니다. – Travesty3

+0

@ Travesty3 그 점을 지적 해 주셔서 감사합니다 .... – ManseUK