使用子查询限制偏移量

时间:2014-01-29 10:58:23

标签: php mysql sql

我正在尝试构建一个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

在这种情况下,您将如何实施限制抵消?

它必须有一个子查询约束,所以我可以返回一定大小的产品。

1 个答案:

答案 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兼容而包含的。可以尝试第一次发生奇怪的事情,但文档说它很好!