【问题标题】:limit offset with subquery使用子查询限制偏移量
【发布时间】:2014-02-21 03:10:57
【问题描述】:

我正在尝试构建一个 mysql 查询,让我可以搜索受子查询(大小)约束的产品,并且有一个偏移量以允许在网站上进行分页。

网址可能如下所示:

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

以下查询仅在偏移量为 0 时才有效(例如 page=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子句放在句子的末尾?

标签: php mysql sql


【解决方案1】:
$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 兼容。可以尝试第一个以防发生奇怪的事情,但文档说没问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    • 2021-04-02
    相关资源
    最近更新 更多