如何从mysql结果中选择第一个和最后一个数据行?

时间:2011-02-04 14:23:25

标签: php mysql

SELECT * from User返回75个用户。是否可以选择第一个用户和第75个用户而不进行while($row = mysql_fetch_assoc($result)) ??怎么样?

更新

更明确一点:我需要SELECT *,因为我需要第一个和第75个用户才能while mysql_fetch_assoc,因此ASC, DESC, LIMIT不需要答案。

6 个答案:

答案 0 :(得分:20)

SELECT * from User LIMIT 1
UNION
SELECT * from User LIMIT 74,1

修改

@Kay:PHP在创建后无法更改结果集的内部顺序。

如果查询总是返回75行,那么访问第1和第75之前的唯一方法就是使用移动内部结果指针的mysql_data_seek

$result = mysql_query('SELECT * from User');

mysql_data_seek($result, 1);
$row1 = mysql_fetch_assoc($result);

mysql_data_seek($result, 75);
$row75 = mysql_fetch_assoc($result);

请注意,如果上面跟着while,则必须将指针重置为合适的位置。

答案 1 :(得分:12)

如果你可以对它进行排序,你可以。

Select * from User order by [something] asc limit 1

Select * from User order by [something] desc limit 1

答案 2 :(得分:5)

假设你有'id'作为主键而你需要最后一个(不是第75个)你可以尝试类似的东西:

SELECT * FROM User WHERE id IN ((SELECT min(id) FROM user b), (SELECT max(id) FROM user c)) 

答案 3 :(得分:2)

SELECT 
(SELECT column FROM table WHERE [condition] ORDER BY column LIMIT 1) as 'first',
(SELECT column FROM table WHERE [condition] ORDER BY column DESC LIMIT 1) as 'last'

答案 4 :(得分:1)

SELECT  u.*
FROM    Users u
        INNER JOIN (
          SELECT MIN(UserID) AS UserID FROM Users
          UNION ALL SELECT MAX(UserID) FROM Users
        ) um ON um.UserID = u.UserID

修改

我不确定我是否完全理解你需要什么,但是后面的第一个和最后一个用户跟着其他人。

SELECT  um.SortOrder, u.*
FROM    Users u
        INNER JOIN (
          SELECT 1 AS SortOrder, MIN(UserID) AS UserID FROM Users
          UNION ALL SELECT 2, MAX(UserID) FROM Users
        ) um ON um.UserID = u.UserID
UNION ALL
SELECT  3 AS SortOrder, u.*
FROM    Users u
        LEFT OUTER JOIN (
          SELECT MIN(UserID) AS UserID FROM Users
          UNION ALL SELECT MAX(UserID) FROM Users
        ) um ON um.UserID = u.UserID
WHERE   um.UserID IS NULL
ORDER BY
        SortOrder

答案 5 :(得分:0)

嗯,你问题的标题与你给出的解释略有不同。

如果你想选择第一行和最后一行,我说是cos,如果行增加或减少,选择第1行和第75行cos可能会有所不同,最后一行可能不是第75行。

要回答第一行和最后一行的部分,我认为你可以这样做。

Path is: '/dev/tty'
Segmentation fault

此查询将很好用,希望用户按ID排序。

但如果你在谈论第1和第75行,那么我将以@Saul的答案解决。

希望这会有所帮助。