SELECT * from User
返回了75个用户。有没有可能选择第1个用户和第75个用户而不使用while($row = mysql_fetch_assoc($result))
,该怎么做?
更新
为了更清楚,请注意:我需要使用SELECT *
,因为我需要在执行while mysql_fetch_assoc
之前获得第一个和第75个用户,所以不需要回答关于ASC,DESC,LIMIT
的问题。
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
循环,那么指针必须被重置到适当的位置。
如果你能排序,那么你就可以了。
Select * from User order by [something] asc limit 1
并且
Select * from User order by [something] desc limit 1
SELECT * FROM User WHERE id IN ((SELECT min(id) FROM user b), (SELECT max(id) FROM user c))
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'
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
嗯,你的问题标题与解释有点不同。
我这么说是因为如果你想选择第一行和最后一行,那么选择第1行和第75行可能会有所不同,因为如果行数增加或减少,最后一行可能不是第75行。
回答第一行和最后一行的部分,我认为你可以这样做。
select distinct(id) from users where id in ((select max(id) from user), (select min(id) from users));
假设用户按id排序,这个查询将运行良好。
但是,如果你要谈论第1行和第75行,那么我会接受@Saul的答案。
希望这可以帮到你。
SELECT ... WHERE id IN(1,75)
的翻译是什么? - Linus KleenLIMIT COUNT(*) - 1, 1
?可能不行。 - Andrew