2014-12-10 1 views
1

하나의 테이블에서 최대 250 개의 행을 선택하려고합니다. 먼저 locked='1' 열을 가진 ALL 행을 선택하고 열 locked = '0' 열을 가진 행 수를 선택하십시오. since (타임 스탬프).MySQL UNION 및 ORDER - 단일 테이블에서 여러 SELECT 쿼리

X는 firest 쿼리의 250 번째 행입니다.

나는이 시도 :

select * from (
select * from aktivni as a1 where locked = '1' 
union 
select * from aktivni as a2 where locked = '0' 
) as tb1 limit 250 

을하지만,이와 나는 (안 since으로 정렬) 두 번째 질의에 정확한 값을 얻을 수 없습니다.

나는이 할 수 있다면 : 모든 것보다

select * from (
select * from aktivni as a1 where locked = '1' 
union 
select * from aktivni as a2 where locked = '0' ORDER BY since DESC 
) as tb1 limit 250 

since에 의해 주문하고 내가 가진 ALL 값을 얻을하지 않습니다를 열 locked 세트에 1

조합 올바른 접근 방식이나 내가 할 수 있나요 뭔가 다른 거?

해결 방법은 PHP로 코드를 작성하는 것입니다. 내가 행을 계산하는 것보다 SELECT * FROM table WHERE locked = '1'

와 두 번째 질의와 나머지 행 SELECT * FROM table WHERE locked = '0' LIMIT (250 - num_rows_from_first_query)를 얻을 수 있지만, 나는 그것을 피하려고 : 우선은 모든를 선택합니다.

답변

2

union 대한 필요가 없습니다 - 그냥 limitorder by에 조건을 사용할 수 있습니다

select locked, since 
from aktivni cross 
order by locked = '1' desc, since desc 
limit 250 
+0

좋은 답변 @sgeddes을, 당신이 할 수있는 당신이 괜찮다면 'order by'에 어떤 조건이 올지 설명해주십시오. –

+0

@VishalZanzrukia - 조건은 모든 결과를'locked = 1 '로 먼저 지정한 다음 나머지 결과를'since desc'로 정렬합니다. '제한'과 함께 원하는 결과를 얻을 수 있습니다. – sgeddes

+0

'선택 잠김, 잠긴 오름차순에 의한 aktivni 순서, desc imit 5 이후 '는이 쿼리와 ans 사이에 어떤 차이가 있습니까? –

관련 문제