Надо простейшую вещь сделать, но я что-то никак не пойму как. У меня есть таблица с двумя полями user,text. Мне надо выбрать N разных текстов, включающих заданное слово, так чтобы все тексты были разные и все были от разных пользователей. Пока что я дошел до
select distinct text from table where text like '% word %' group by user limit N;
но это работает не совсем верно (может не найти решение, если строки неудачно расположены), а главное ужасно медленно.
select distinct text from table where text like '% word %' group by user limit N;
но это работает не совсем верно (может не найти решение, если строки неудачно расположены), а главное ужасно медленно.
Re: Робко..
Date: 2008-01-10 08:29 pm (UTC)SELECT DISTINCT user, text ...
без всякого GROUP
А GROUP вообще срабатывате до DISTINCT и берет первую подходящую строку.
Re: Робко..
Date: 2008-01-11 09:28 am (UTC)умные люди говорят, что сделать что-нибудь тяжело. Вот если бы у тебя все юзеры и все тексты были заданы id и были бы проиндексированы.. :)
Да, так вот люди говорят, что, как не удивительно, может быть быстрее будет работать с вложенным подзапросом - внутренний запрос выбирает все тексты, содержащие слово, а внешний запрос уже из этих текстов выбирает уникальные. А еще лучше, если бы можно было результаты внутреннего запроса скинуть в temporary table и проиндексировать ее хотя бы по юзерам. А потом уже к ней обращаться..