我想要显示表中的所有记录。恩。从学生表。 第一行的特定学生信息。 ex。学生id = 3,然后显示其他学生信息。显示所有记录从顶部的小行开始
So result look like
Id Name City
3 PQR xyz
1 LMN xyz
2 ABC xyz
4 WXY xyz
在此先感谢
我想要显示表中的所有记录。恩。从学生表。 第一行的特定学生信息。 ex。学生id = 3,然后显示其他学生信息。显示所有记录从顶部的小行开始
So result look like
Id Name City
3 PQR xyz
1 LMN xyz
2 ABC xyz
4 WXY xyz
在此先感谢
它通常是更好地激发两个查询要做到这一点,并把结果放在一起在你的应用程序。
但是有一些技巧可以工作。
这两种技术我会考虑是:
1.使用联盟
SELECT * FROM students WHERE id = 3
UNION ALL
SELECT * FROM students where id <> 3;
甚至
SELECT * FROM students WHERE id = 3
UNION ALL
SELECT * FROM (SELECT * FROM students where id <> 3 order by id) x;
2.复杂的ORDER BY语句
SELECT * FROM students order by id = 3 desc, d;
请注意,这样比较容易阅读,但可以肯定的是,在大型索引表中,性能较低,因为优化器将无法使用索引进行排序。
select * from students
order by id <> 3,
id
或
select * from students
order by case when id = 3
then 1
else 2
end,
id
我喜欢:
SELECT *
FROM student
ORDER BY id = 3 DESC, /* id = 3 returns 1 (true) or 0 (false) */
id /* This will put your other students in ASC order of id */
请注意,使用此技术会强制优化器远离使用索引进行排序,因为索引的顺序中没有id = 3。 – 2014-10-02 10:36:10
我没有意识到索引问题,我像WHERE子句一样阅读它。谢谢你的提示。 – Arth 2014-10-02 10:43:54
你的代码在哪里? – 2014-10-02 10:10:07