找到3行

时间:2013-08-16 13:15:32

标签: php mysql sql limit

我想在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

但是,有没有更简单的方法来做到这一点并将所有内容都集成到一个查询中?

3 个答案:

答案 0 :(得分:2)

MySQL中的行没有订购,这意味着它们可以按任何顺序返回。因此,使用LIMIT建议的解决方案将无法永久运行。而是添加ID属性并查询您的日期,如下所示。

SELECT * FROM `table`
WHERE `value` = '$value'
  AND `ID` in (5, 10, 15)

答案 1 :(得分: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

答案 2 :(得分: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)