首页 > 解决方案 > 选择 product_id 最低的所有行

问题描述

我有这个表,我想选择产品 ID 为 105 的所有行。如果我知道产品 ID 并放入 where 子句,但我不知道产品 ID 并且一旦完成此 ID 工作,它就会增加,它将删除这些行并搜索下一个最低的产品 ID。

我可以使用订单 bt product_id 但如何确保列出所有行。如果我给出 100 个限制,那么前 10-15 个可能是最低的,之后它将开始列出下一个更高的 product_id 行

这是桌子

id   name  product_id some_columns
1    dff   105          gfff
2    fg    109          ffgfgf
3    tt    106          gttytt
4    tt    105          trtr
5    trr   112           trrrt
6    rrr   111           rttttr
7    ttyt  108            ttrtrtr
8    rrrr  105            rrerer






   SELECT id, name, product_id, some_columns 
   FROM table_name 
   WHERE product_id = (SELECT MIN(product_id) FROM table_name)

在这里您可以看到最低 product_id 为 105,但我无法控制它在表中出现的次数。在某些情况下可能是 10 行,在某些情况下可能是 250 行。

因此按 product_id 订购将不起作用。由于给定限制将列出所有 id 最初的几行可能是 105,但是在列出所有 105 行之后,它将开始列出所有高于 105 的行

最好的解决方案是,如果我可以使用 where product_id=105 但我运气不好,我对产品 ID 没有任何控制,因此不能在 where 子句中使用产品 ID。下一个大问题是我想有效地使用它,所以我们索引了 product_id 列,我正在探索最小值选项,但我非常怀疑它的效率和对 mysql 的可能影响

所以任何帮助都会很棒

标签: mysql

解决方案


你可以尝试类似的东西

SELECT id, name, product_id, some_columns 
FROM table_name 
WHERE product_id = (SELECT MIN(product_id) FROM table_name)

据我了解,您想选择与最小 product_id 匹配的所有行。无论是 101、102 还是其他,都是不可控的,所以你在行中获取最小的 product_id,然后选择具有当前最小 product_id 的行。


推荐阅读