Выбор случайной записи в MySQL с проблемой предложения WHERE - PullRequest
0 голосов
/ 29 апреля 2009

Я запускаю следующий код, чтобы получить случайную запись из словаря:

SELECT * FROM tbl_dict WHERE 1 ORDER BY RAND() LIMIT 1

Это прекрасно работает, но как только я разверну предложение WHERE, запрос не будет выполнен. Мне нужно что-то вроде ...

SELECT * FROM tbl_dict WHERE 1 and lock='0' ORDER BY RAND() LIMIT 1

Может кто-нибудь указать мне, где я иду не так? Мой разум превратился в арахисовое масло.

Спасибо!

Ответы [ 2 ]

5 голосов
/ 29 апреля 2009

блокировка - это зарезервированное слово для MySQL. Вы должны поместить его в кавычки (`) или двойные кавычки (в режиме ANSI), если вы хотите использовать его в качестве идентификатора.

Вас также может заинтересовать http://jan.kneschke.de/projects/mysql/order-by-rand.
ORDER BY Rand () может быть или не быть слишком неоптимальным в вашем случае, когда речь идет о скорости.

0 голосов
/ 29 апреля 2009

Неважно, это неправильно для того, что вы пытаетесь сделать.

У вас в таблице есть синтетический столбец идентификатора auto_incremented id, верно?

если так, то почему бы и нет:

  select * from tbl_dict where id 
   = (select floor( rand() * ( max(b.id) + 1) ) from tabl_dict b );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...