我正在尝试构建一个mysql查询,让我可以搜索受子查询(大小)约束的产品,并且有一个偏移量允许在网站上进行分页。
网址可能如下所示:
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 :(得分: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子句有两种语法:
LIMIT {[offset,] row_count | row_count OFFSET offset}
您使用的第二种语法是为了与PostgreSQL兼容而包含的。可以尝试第一次发生奇怪的事情,但文档说它很好!