我正在尝试组合在同一表上调用的多个查询,并且完全不知道如何实现这一点。
我构建了 3 个查询,一个接一个地运行。这有效,但我想知道如何在 3 次运行时构建这些查询 1 个查询。
I - 获取整行
从
sp_products_items
中选择 *,其中 id='.$id
二、获取"兄弟姐妹"计数
从
sp_products_items
中选择计数(*),其中 parent_id = $result->parent_id
III - 获取上一个和下一个 ID(基于计数字段)
选择
(从sp_products_items
中选择 ID,其中顺序= $result->订单 + 1) 作为下一个,(从sp_products_items
中选择 ID,
其中顺序= $result->订单 - 1) 如上一个
关于如何实现这一目标的任何线索?甚至可能吗?它会获得一些性能还是将它们组合在一次运行中完全没有意义?
我尝试了一些嵌套选择,内部连接,但没有成功:(
也许像
SELECT n.id AS next,
p.id AS previous,
( SELECT COUNT(*) FROM sp_products_items WHERE id = a.parent ) AS ct
FROM sp_products_items AS a
LEFT JOIN sp_products_items AS n ON n.`order` = a.`order` + 1
LEFT JOIN sp_products_items AS p ON p.`order` = a.`order` - 1
WHERE a.id = $id
我使用了LEFT
,因为查询可能会从末尾掉下来。 或者编号可能存在差距 - 这更难解释。
我不知道COUNT(*)
的目的,所以我只是把它作为额外的信息扔进去。
sp_products_items
需要INDEX(order)