0

我想在 MySQL 请求中找到 3 行,例如第 5、10 和 15 行

我知道我可以做 3 个单一的请求

SELECT * FROM \`table\` WHERE \`value\` = '$value' LIMIT 4,1
SELECT * FROM \`table\` WHERE \`value\` = '$value' LIMIT 9,1
SELECT * FROM \`table\` WHERE \`value\` = '$value' LIMIT 14,1

但是,难道没有更简单的方法可以做到这一点并将所有内容都放入一个查询中吗?

4

3 回答 3

2

MySQL 中的行是无序的,这意味着它们可以按任何顺序返回。因此,您提出的解决方案LIMIT不会永远有效。而是添加一个ID属性并查询您的日期,如下所示。

SELECT * FROM `table`
WHERE `value` = '$value'
  AND `ID` in (5, 10, 15)
于 2013-08-16T13:19:12.333 回答
0

尝试UNION ALL

SELECT * FROM (SELECT * FROM `table` WHERE `value` = '$value' LIMIT 4,1) as tmp1
UNION ALL
SELECT * FROM (SELECT * FROM `table` WHERE `value` = '$value' LIMIT 9,1) as tmp2
UNION ALL
SELECT * FROM (SELECT * FROM `table` WHERE `value` = '$value' LIMIT 14,1) as tmp3
于 2013-08-16T13:17:46.767 回答
0

按位置引用行很少是一个好主意。使用主键。如果您没有主键 - 添加一个。

如果您绝对确定您确实需要按位置引用行,则可以使用 UNION (如 Sashi Kant 的回答),或者您可以给它们序号并像这样过滤它们:

SELECT *
FROM (SELECT 
    @i=@i+1 as i,
    t.*
    FROM `table` t
    JOIN (SELECT @i:=0) #0 will make the row index 1-based, if you need 0-based you can change it to -1
    WHERE `value` = '$value'
    ORDER BY <something>
    LIMIT 15 #the max row num you want
) as t
WHERE t.i IN (5,10,15)
于 2013-08-16T13:53:21.180 回答