从MySQL表中随机选择最后三个条目中的一个
我想显示最近三条新闻中的一条。我提出了以下问题:从MySQL表中随机选择最后三个条目中的一个,mysql,Mysql,我想显示最近三条新闻中的一条。我提出了以下问题: SELECT * FROM News WHERE Id IN ( SELECT Id FROM News WHERE Display=1 ORDER BY Published DESC LIMIT 3 ) ORDER BY RAND(
SELECT
*
FROM
News
WHERE
Id IN (
SELECT
Id
FROM
News
WHERE
Display=1
ORDER BY
Published DESC
LIMIT 3
)
ORDER BY
RAND()
LIMIT 1
我原以为这会非常低效,但会奏效。事实上,它没有:
查询错误(1235):此版本的MySQL尚不支持“LIMIT&in/ALL/ANY/SOME子查询”
所以我的实际问题是,有没有办法从表中随机选择最后三项中的一项?
mysql>显示变量,如“%version%”;
+-------------------------+-------------------------+
|变量名称|值|
+-------------------------+-------------------------+
|innodb|U版本| 5.6.28|
|协议|版本| 10|
|从属类型转换|
|版本| 5.6.28-0ubuntu0.15.10.1|
|版本|注释|(Ubuntu)|
|版本编译机器x86 64|
|版本编译操作系统debian linux gnu|
+-------------------------+-------------------------+
一组7行(0.00秒)
错误表示MySQL不支持以下形式的语句:
SELECT * FROM t1 WHERE s1 IN (SELECT s2 FROM t2 ORDER BY s1 LIMIT 1)
请参阅mysql文档尽量避免使用
orderbyrand()
。这里更好的方法是从数据库中获取最新的三个条目。然后在服务器端代码中随机选择一个。我发现了一个类似的问题,如果你提到的话
您必须创建一个临时表,然后从中随机选择一行。在您的情况下,它将是:
SELECT * FROM (
SELECT * FROM `News` WHERE `Display` = `1`
ORDER BY `Published` DESC LIMIT 3
) AS temptable
ORDER BY RAND()
LIMIT 1
正如前面所建议的,最好选择最后10个,然后在服务器端代码中随机选择一个。当您遇到太复杂的问题时,编程也在寻找解决办法<代码>:) 这就好比当你想用一门外语说一些东西,却漏掉了一个单词,所以你就不这么说了 在这里你可以得到最后3条新闻,放在一个表格中,然后选择一条随机新闻 如果您使用PHP编写代码,请查看。您使用的是哪个版本的MySQL?可能与