Сравнение результата INT(11) с FLOOR() в 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());

Теперь я хотел сделать то же самое, но вместо сравнения идентификатора котировки с сегодняшним идентификатором я сравню его со случайным числом. Согласно phpMyAdmin тип из столбца ID — «int (11)», поэтому я не знаю, что с ним может быть не так. Спасибо за ваше время!


person Pablo Quemé    schedule 07.06.2015    source источник
comment
Что может быть не так с что?   -  person zerkms    schedule 08.06.2015


Ответы (1)


Ваш первый запрос дает целое число. Вы не можете сравнить это со свиданием (при условии, что вы пытаетесь это сделать).

Я объединил ваши запросы, используя ответ на этот вопрос:

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».

person Tomaso Albinoni    schedule 08.06.2015