我想查询数据库并返回特定的行号,例如1,10和25.
这是可能的还是我需要进行3次查询(或1次查询并遍历行,然后只输出我需要的那些)
使用php。
答案 0 :(得分:4)
如果您需要特定的ID,您可以简单地使用......
SELECT XXX FROM table WHERE XXX_id IN (1, 10, 25) ORDER BY XXX
...让这些行回来。但是,如果您只是在任意行号之后,那么就我所知,您将不得不使用多个查询。 (或者使用PHP等来回取所需的行。)
出于兴趣,你想要实现什么目标?
答案 1 :(得分:2)
您需要使用limit clause:
第一行:
select * from table limit 0, 1
第十排:
select * from table limit 9, 1
第25行:
select * from table limit 24, 1
只需一次查询的解决方案:
如果您使用的是php,则可以使用:mysql_fetch_row:
<?php
$result = mysql_query(" select * from table");
if (!$result) {
echo 'Could not run query: ' . mysql_error();
exit;
}
$row = mysql_fetch_row($result);
echo $row[0]; // 1st
echo $row[9]; // 10th
echo $row[24]; // 25th
?>
答案 2 :(得分:1)
如果你需要经常这样做(如果db很大),你还必须在某处存储行号(更具体地说是行号到数字映射)。
MyTable
-------
id
row_nr
...
并在每次删除条目时更新row_nr。
即。 - 如果删除id = 10的条目,则必须
UPDATE MyTable SET row_nr = row_nr - 1 WHERE id > 10
添加行时使用
INSERT INTO MyTable (whatever, row_nr)
VALUES ('thatever', (
SELECT MAX(MT2.row_nr)+1 FROM MyTable as MT2
))
-
然后你可以使用
SELECT XXX FROM MyTable WHERE row_nr IN (1, 10, 25)
选择时。
答案 3 :(得分:0)
这是我使用一个查询按rownumber选择多行的解决方案:
SELECT * FROM
(SELECT @row := @row + 1 as row, t.*
FROM `default_red_albums` t, (SELECT @row := 0) r) AS view
WHERE `row` IN(4,8)
子查询返回一个带有额外&#34;行&#34;的表。柱。 mainquery只需要使用where语句进行过滤。
在14000行表上测试,花了0.0672秒。