2014-01-29 99 views
0

我想構建一個mysql查詢,讓我搜索產品約束的子查詢(大小)和有一個偏移量,以便在網站上分頁。限制偏移與子查詢

一個URL可能看起來像這樣:

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

下面的查詢工作只有在偏移量爲0(例如,頁面= 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 

你將如何實現一個極限偏差這個案例?

它必須有一個子查詢約束,所以我可以返回一定大小的產品。

+0

如果你把'LIMIT ... OFFSET'子句放在sentenca的最後? –

回答

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.' 

有2個語法的LIMIT子句:

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

您使用的是被列入了兼容PostgreSQL第二個語法。可以嘗試第一次發生奇怪的事情,但文檔說它很好!