Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Поиск в случайном порядке / 14 сообщений из 14, страница 1 из 1
29.12.2015, 08:58
    #39139773
ldar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в случайном порядке
Здравствуйте.
Подскажите советом, необходимо искать в таблице слова, в каждой строке одно слово, в итоге получать id, но выдача должна быть рандомная и в количестве 5 штук. Чтоб при одном и том же поисковом запросе, выдавало разные id.
Таблица имеет такой вид
id | value
1 | Бордовый
2 | Серый

Запрос делаю таким

Код: sql
1.
SELECT t0.id, t0.value  FROM param t0  WHERE MATCH(t0.value) AGAINST ("txt" IN BOOLEAN MODE)  LIMIT 5


Он выдает постоянно одни и те же результаты,
делаю так
Код: sql
1.
SELECT t0.id, t0.value  FROM param t0  WHERE MATCH(t0.value) AGAINST ("txt" IN BOOLEAN MODE) ORDER BY RAND()  LIMIT 5


Выдает ерунду

Надеюсь понятно объяснил
...
Рейтинг: 0 / 0
29.12.2015, 09:11
    #39139782
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в случайном порядке
ldarВыдает ерунду

Надеюсь понятно объяснил
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
mysql> SELECT t0.id, t0.value
    -> FROM param t0
    -> WHERE MATCH(t0.value) AGAINST ("txt" IN BOOLEAN MODE)
    -> ORDER BY RAND()
    -> LIMIT 5;

ERROR 65535 (65535): ерунда       |

mysql>


Вот так?
...
Рейтинг: 0 / 0
29.12.2015, 09:36
    #39139796
ldar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в случайном порядке
AkinaldarВыдает ерунду

Надеюсь понятно объяснил
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
mysql> SELECT t0.id, t0.value
    -> FROM param t0
    -> WHERE MATCH(t0.value) AGAINST ("txt" IN BOOLEAN MODE)
    -> ORDER BY RAND()
    -> LIMIT 5;

ERROR 65535 (65535): ерунда       |

mysql>


Вот так?

Упс, этот запрос отрабатывает ...Тогда сознаюсь, в действительности таблица немного другая, здесь я ее упростил думал что проблема именно в этом.

Вот как на самом деле


необходим вытаскивать товар, который попадает по 3 типам, к примеру
type=1 value= Синий
type=2 value= Женский
type=3 value= Зима
на выходе получить id_item


вот запрос, который правильно отрабатывает
Код: sql
1.
2.
SELECT t0.offer_id, t0.value  FROM param t0  GROUP BY t0.offer_id  HAVING COUNT(t0.id)=3 AND
                        MATCH(t0.value) AGAINST ("Синий Женский Зима" IN BOOLEAN MODE) LIMIT 5



Делаю так

Код: sql
1.
2.
SELECT t0.offer_id, t0.value  FROM param t0  GROUP BY t0.offer_id  HAVING COUNT(t0.id)=3 AND
                        MATCH(t0.value) AGAINST ("Синий Женский Зима" IN BOOLEAN MODE) ORDER BY RAND() LIMIT 5



выдает ерунду.
...
Рейтинг: 0 / 0
29.12.2015, 09:39
    #39139800
ldar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в случайном порядке
offer_id в запросе, это id_item в таблице, поторопился....
...
Рейтинг: 0 / 0
29.12.2015, 09:55
    #39139817
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в случайном порядке
250 сообщений, и всё никак не можешь понять, что выражения типа "выдаёт ерунду" следует оставить для посиделок с пивком на скамейке, а на форуме точно цитировать текст ошибки?
...
Рейтинг: 0 / 0
29.12.2015, 10:05
    #39139821
ldar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в случайном порядке
Akina250 сообщений, и всё никак не можешь понять, что выражения типа "выдаёт ерунду" следует оставить для посиделок с пивком на скамейке, а на форуме точно цитировать текст ошибки?

Извиняюсь, выдает результат не тот который я хочу

Вот запрос который сейчас работает
Код: sql
1.
2.
SELECT t0.offer_id, t0.value  FROM param t0  GROUP BY t0.offer_id  HAVING COUNT(t0.id)=3 AND
                        MATCH(t0.value) AGAINST ("Бордовый Женский seas_none" IN BOOLEAN MODE)  LIMIT 5


Выдает

"offer_id" "value""115397" "Бордовый""115856" "Бордовый""116042" "Бордовый""117310" "Бордовый""118461" "Бордовый"

Вот с рандомом, который выдает "ерунду"

Код: sql
1.
2.
SELECT t0.offer_id, t0.value  FROM param t0  GROUP BY t0.offer_id  HAVING COUNT(t0.id)=3 AND
                        MATCH(t0.value) AGAINST ("Бордовый Женский seas_none" IN BOOLEAN MODE) ORDER BY RAND() LIMIT 5



Результат

"offer_id" "value""143315" "Сине-Зеленый""135338" "Персиковый""134536" "Серый""126127" "Черный""155139" "Песочный"
...
Рейтинг: 0 / 0
29.12.2015, 10:15
    #39139828
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в случайном порядке
Ну и правильно выдаёт. Хотя бы потому, что MATCH..AGAINST должен быть в секции WHERE, а не в секции HAVING...
...
Рейтинг: 0 / 0
29.12.2015, 10:35
    #39139842
ldar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в случайном порядке
AkinaНу и правильно выдаёт. Хотя бы потому, что MATCH..AGAINST должен быть в секции WHERE, а не в секции HAVING...
написал вот такой запрос

Код: sql
1.
SELECT t0.offer_id, t0.value  FROM param t0 WHERE MATCH(t0.value) AGAINST ("Бордовый Женский seas_none" IN BOOLEAN MODE) GROUP BY t0.offer_id HAVING COUNT(t0.id)=3 ORDER BY RAND()  LIMIT 5


Запрос стал медленным, 2 сек

Explain
id ; select_type ; table ; type ; possible_keys ; key ; key_len ; ref ; rows ; Extra 1 ; SIMPLE ; t0 ; fulltext ; offer_id value_text ; value_text ; 0 ;\N; 1 ; Using where; Using temporary; Using filesort
...
Рейтинг: 0 / 0
29.12.2015, 10:55
    #39139861
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в случайном порядке
ldarЗапрос стал медленным, 2 сек
Результат стал правильным?
...
Рейтинг: 0 / 0
29.12.2015, 10:58
    #39139864
ldar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в случайном порядке
AkinaldarЗапрос стал медленным, 2 сек
Результат стал правильным?
Да, правильным. А как лучше ускорить его?
...
Рейтинг: 0 / 0
29.12.2015, 11:12
    #39139872
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в случайном порядке
ldarкак лучше ускорить его?
Ну для начала, наверное, заменить полнотекст на прямой отбор. И создать индекс, который позволит выполнять фильтрацию и группировку по индексу.
А дальше, после группировки, уже оптимизировать собсно нечего. Using temporary; Using filesort неизбежны.
...
Рейтинг: 0 / 0
29.12.2015, 12:38
    #39139969
ldar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в случайном порядке
Akinaldarкак лучше ускорить его?
Ну для начала, наверное, заменить полнотекст на прямой отбор. И создать индекс, который позволит выполнять фильтрацию и группировку по индексу.
А дальше, после группировки, уже оптимизировать собсно нечего. Using temporary; Using filesort неизбежны.
Прямой отбор да, улучшил результат, но мне все таки нужно будет использовать полнотекст т.к. текст может содержаться в разных регистрах, как в базе так и в запросе. Эта база досталась мне от прошлого программиста.
Насчет индексов, у меня стоит индекс на каждое поле и explain показал, что их использует.
А как можно здесь использовать temporary, что в нем хранить?
...
Рейтинг: 0 / 0
29.12.2015, 12:42
    #39139975
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в случайном порядке
ldarмне все таки нужно будет использовать полнотекст т.к. текст может содержаться в разных регистрах, как в базе так и в запросе
А, может, разумнее почитать мануал на предмет того, за каким хреном существует слово Collation?

ldarу меня стоит индекс на каждое поле и explain показал, что их использует.
Не "их", а "один из них". Ибо несколько индексов одновременно (пока) MySQL использовать вроде как не научился. Так что надо не дохрена по отдельности индексированных полей, а один составной индекс по делу.
...
Рейтинг: 0 / 0
29.12.2015, 12:54
    #39139982
ldar
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск в случайном порядке
Akina,
Благодарю, Вы мне очень помогли,
время сократилось с 2сек до 0,124 сек
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Поиск в случайном порядке / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]