我有这个表,它可以通过id asc或desc按顺序轻松排序,但它总是给出相同的结果,所以只有asc或desc才能获得两个结果 表A
id linkid
5454 766
5453 766
5452 766
5451 766
5450 766
5449 766
5448 765
5447 765
5446 765
5445 765
select * from tablea where linkid='766' order by id desc limit 1
or
select * from tablea where linkid='766' order by id asc limit 1
当我使用上面的查询我只有两个选项要么使用asc或desc只能以两种方式排序linkid 766我将得到id 5454或5449的输出,但我想使用任何一个id correspnding to linkid。我想要像这样的linkid 766的输出。查询应该给出任何一个值,不仅是我通过使用asc或desc得到的第一个或最后一个值,但我再次不想使用rand(),因为它是死的慢< / p>
我可以尝试rand(),但它会死得很慢
select * from tablea where linkid='766' order by rand() limit 1
任何想法如何实现。
答案 0 :(得分:0)
如果查询中的预期结果集足够小,那么您可能需要考虑使用应用层来随机化您的选择。我不知道你的数据库基础设施或负载,但我使用的一般经验法则是“App Tier比数据库层更容易扩展”!
话虽如此,我知道在某些情况下你真的想在DB层随机化结果。我们必须在几个实例中做到这一点,在我们的研究中,我们偶然发现了似乎对我们有用的以下内容。 http://www.rndblog.com/how-to-select-random-rows-in-mysql/
在这里重复所有内容是没有意义的,但为了确保如果给定链接上的页面消失,这里是一个高级摘要。基本上,这个链接正在讨论的是......而不是在order by子句中使用RAND(这可能非常昂贵)
SELECT col1 FROM tbl ORDER BY RAND() LIMIT 10;
在WHERE子句中使用它:
SELECT col1 FROM tbl WHERE RAND()<=0.0006 limit 100;
希望这会对你有所帮助。
答案 1 :(得分:0)
你试试这个吗?
SELECT * FROM table LIMIT 1 ORDER BY id DESC
或者
SELECT * FROM table ORDER BY id DESC