2014-01-29 4 views
0

서브 쿼리 (크기)로 제약을받는 제품을 검색하고 사이트의 페이지 매김을 허용하도록 오프셋을 허용하는 mysql 쿼리를 생성하려고합니다.하위 쿼리로 제한 오프셋

URL은 다음과 같을 수 있습니다 : 오프셋이 0 인 경우에만

http://www.[webshop].com?category=shirts&size=m&page=2 

다음 쿼리는 작동 (예 : 페이지 = 0)에서 오프셋 제한을 구현하는 것이 어떻게

$limit = 50; 
$offset = $page * 50; 

SELECT * 
FROM ((SELECT * FROM sales WHERE sale_id IN (SELECT sales_sizes.sale_id FROM sales_sizes WHERE sales_sizes.size = '.$size.') '.$search_string.' ORDER BY created_at DESC LIMIT '.$limit.' OFFSET '.$offset.') s) 
LEFT JOIN sales_sizes ss ON s.sale_id = ss.sale_id 
LEFT JOIN sales_images si ON s.sale_id = si.sale_id 
LEFT JOIN sales_prices sp ON s.sale_id = sp.sale_id 

이 경우?

하위 쿼리 제약 조건이 있어야하므로 특정 크기의 제품을 반환 할 수 있습니다.

LIMIT {[offset,] row_count | row_count OFFSET offset} 

당신은 PostgreSQL의와의 호환성을 위해 포함 된 사용하고 두 번째 구문 :

+0

sentenca의 끝에'LIMIT ... OFFSET' 절을 넣으면? –

답변

0
$limit = 50; 
$offset = $page * 50; 

SELECT * 
FROM sales s 
    INNER JOIN sales_sizes ss ON s.sale_id = ss.sale_id 
    LEFT JOIN sales_images si ON s.sale_id = si.sale_id 
    LEFT JOIN sales_prices sp ON s.sale_id = sp.sale_id 
WHERE ss.size = '.$size.' 
ORDER BY ss.created_at DESC 
LIMIT '.$limit.' OFFSET '.$offset.' 

는 LIMIT 절 2 개 구문을있다. 이상한 일이 처음 일어 났을 때 시도해 볼 수는 있었지만, 문서에서는 괜찮다고 말합니다!