Mysql - 同一表上的多个查询:获取完整的单行 reccord + 仅获取下一个和上一个 ID + 根据parent



我正在尝试组合在同一表上调用的多个查询,并且完全不知道如何实现这一点。

我构建了 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)

最新更新