【问题标题】:Comparing an INT(11) to a FLOOR() result in MySQL在 MySQL 中比较 INT(11) 和 FLOOR() 结果
【发布时间】:2015-06-07 23:43:40
【问题描述】:

我有一个名为引号的表,我想创建一个 MySQL 查询,该查询从随机引号中返回数据。我在网上搜索,发现如何创建一个从 1 到表中引号数的随机数:

SELECT FLOOR(RAND() * (SELECT ((SELECT COUNT(*) FROM DAILYS) - 1))) + 1 AS RANDNUM;

我已经对此进行了测试,它可以正常工作,它每次都会在我需要的范围内返回一个随机数。

问题是我需要从两个表中获取信息,QUOTES 和 AUTHORS。这以前有效:

SELECT QUOTES.QUOTE, AUTHORS.NAME, AUTHORS.LINK
FROM QUOTES JOIN AUTHORS ON QUOTES.AUTHOR_ID = AUTHORS.ID
WHERE QUOTES.ID =
(SELECT QUOTE_ID FROM DAILYS WHERE DAY = CURDATE());

现在我想做同样的事情,但是为了比较报价 ID 和今天的 ID,我会将它与随机数进行比较。根据 phpMyAdmin,ID 列的类型是“int(11)”,所以我不知道它可能有什么问题。感谢您的宝贵时间!

【问题讨论】:

  • what 可能有什么问题?

标签: php mysql


【解决方案1】:

您的第一个查询产生一个整数。您无法将其与日期进行比较(假设您正在尝试这样做)。

我使用this question 的答案合并了您的查询:

SELECT QUOTES.QUOTE, AUTHORS.NAME, AUTHORS.LINK
FROM QUOTES
JOIN AUTHORS ON QUOTES.AUTHOR_ID = AUTHORS.ID
WHERE QUOTES.ID =
(SELECT QUOTE_ID FROM DAYLYS ORDER BY DAY LIMIT
(SELECT FLOOR(RAND() * (SELECT ((SELECT COUNT(*) FROM DAILYS) - 1)))),1);

我没有对此进行测试,但我相当有信心它应该可以工作(如果我正确理解您的数据库设计)。

编辑:根据我引用的页面上的另一个答案,“偏移量是零索引”,所以我删除了“+ 1”。

【讨论】:

    猜你喜欢
    • 2021-07-06
    • 2020-10-15
    • 2011-06-04
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多