Имеется таблица book в которой около 50 записей.
Поля таблицы id(int),name(varchar),path(text),lang(int, value = 1,2,3).
lang=1 примерно 18 записей
lang=2 примерно 16 записей
lang=3 примерно 16 записей
Необходимо составить sql запрос, чтобы выбрать 3 книги, первая из которых это случайное число из первых 18 записей, второе это тоже случайное число из вторых 16 записей, и третья соответственно тоже случайное число из последних 16 записей
Что то на подобие такого:
SELECT * FROM book
WHERE lang=1 ORDER BY RAND () LIMIT 1
AND
WHERE lang=2 ORDER BY RAND () LIMIT 1
AND
WHERE lang=3 ORDER BY RAND () LIMIT 1;
Ответ
Для ваших объемов данных подойдет очень простой запрос:
SELECT random_book.*
FROM book
LEFT JOIN (SELECT * FROM book ORDER BY RAND()) random_book ON (book.lang = random_book.lang)
GROUP BY random_book.lang
ORDER BY RAND() - это не быстро на больших обьемах данных.
Комментариев нет:
Отправить комментарий