mysql - 选择 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 的可能影响
所以任何帮助都会很棒
解决方案
你可以尝试类似的东西
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 的行。