Случайно получить строку, где поле не является, MySQL - PullRequest
0 голосов
/ 03 октября 2011

Я пытаюсь получить одну строку из базы данных mysql, используя одну из продвинутых случайных функций, существующих там. Тем не менее, когда я пытаюсь фильтровать, чтобы получить только строки строк, в которых есть «field = 1», все терпит неудачу. Может кто-нибудь, пожалуйста, определите мою ошибку?

SELECT username, message, ttime 
FROM table WHERE done LIKE '1' AS r1 JOIN 
   (SELECT (RAND() *
                 (SELECT MAX(id)
                    FROM database)) AS id)
    AS r2
WHERE r1.id >= r2.id
ORDER BY r1.id ASC
LIMIT 1;";

1 Ответ

1 голос
/ 03 октября 2011

Ваш запрос содержит несколько синтаксических ошибок. Вы хотели что-то подобное?

SELECT username, message, ttime 
FROM database.table1 as r1 
INNER JOIN 
   (SELECT (RAND() * MAX(id)) as a_random_id
    FROM database.table1) r2
ON (r1.id >= r2.a_random_id)
WHERE done = '1'
ORDER BY r1.id ASC
LIMIT 1

Интересно, быстрее ли этот вариант:

SELECT r.username, r.message, r.ttime 
FROM database.table1 r 
WHERE r.id = (  
  SELECT MIN(r1.id)  <<-- this should make MySQL stop after the first hit.
  FROM database.table1 r1 
  INNER JOIN 
     (SELECT (RAND() * MAX(id)) as a_random_id
      FROM database.table1) AS r2
  ON (r1.id >= r2.a_random_id)
  WHERE r1.done = '1') sub

Да, и вы не выбираете из database, вы выбираете из table внутри базы данных.

...