将INT(11)与FLOOR()进行比较导致MySQL

时间:2015-06-07 23:43:40

标签: php mysql

我有一个名为引号的表,我想创建一个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进行比较,我会将它与随机数进行比较。 ID列中的类型是" int(11)"根据phpMyAdmin,所以我不知道它可能有什么问题。谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

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

我使用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"。