Форум "DataBase и SQL"
Язык запросов баз даных
Проблема с union в MySQLзапрос такого вида работает: (select ...) union (select ...) union (select ...) union (select ...) order by rand() limit n добавляюю две скобки (выделены жирным) то перестаёт работать: (select ...) union (select ...) union ((select ...) union (select ...) order by rand() limit n) Т.е. мне нужна такая логика работы запроса, чтобы order by rand() limit n было применено только к последним двум select-ам. Как добится такого результата?
|
|
>#0 VictorT © сортировка происходит после ВСЕХ ввыборок и группировок.... так что боюсь, выход один -- 1)помечать записи из другого селекта 2)делать рандом-сортировку полученых помеченных записей на клиенте |
|
> сортировка происходит после ВСЕХ ввыборок и группировок.... Да вот не обязательно как раз. В документации написано, что можно сортироватаь как все вместе, так и по отдельности каждый select. B для двух select-ов и одного union это у меня действительно рабатоет, как по отдельности, так и вместе. А для 4-х select-ов и о2-х union почему-то не хочет работать. Ссылка на ман: > 1)помечать записи из другого селекта в смысле? Что это даёт? > 2)делать рандом-сортировку полученых помеченных записей > на клиенте Абсолютно не подходит. Ты, видимо, не понял смысл инструкции order by rand() limit n (n довольно маленькое, меньше 10-ти). Смысл в том, что из большого массива информации случайно выбираются только несколько строк. Перемешивать уже на клиенте нет никакого смыла 2-3 неслучайных строки. |
|
Получилось вот так: select ...
|
|
З.Ы. union не хочет обьеденять результат другого union, обьеденяет только результат select. Засунул один union в select. |
|
мда... оказывается MySQL тоже на извраты горазд |
Написать ответ |
|
