从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?可能与