SELECT * from User
返回75个用户。是否可以选择第一个用户和第75个用户而不进行while($row = mysql_fetch_assoc($result))
??怎么样?
更新
更明确一点:我需要SELECT *
,因为我需要第一个和第75个用户才能while mysql_fetch_assoc
,因此ASC, DESC, LIMIT
不需要答案。
答案 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的答案解决。
希望这会有所帮助。