Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / запрос поиск по строкам / 10 сообщений из 10, страница 1 из 1
13.06.2017, 06:31
    #39470660
tadeyiloda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос поиск по строкам
есть таблицы
1 слово слово слово2слово слово слово
id userid text1 1 слово слово 22 слово слово
как мне получить записи из второй таблицы, с условием что text содержит все слова из любой записи первой таблицы
...
Рейтинг: 0 / 0
13.06.2017, 07:45
    #39470675
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос поиск по строкам
Нормализуйте первую таблицу до состояния
Код: sql
1.
2.
3.
4.
5.
6.
7.
id, word_num, word
1,1,word1-1
2,2,word1-2
3,3,word1-3
4,1,word2-1
5,2,word2-2
6,3,word2-3


После этого выполните простейший поиск каждого слова, подсчитайте количество найденных слов и сравните с количеством слов набора. Те записи, где эти значения равны - вывести.
...
Рейтинг: 0 / 0
13.06.2017, 07:51
    #39470676
tadeyiloda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос поиск по строкам
не очень понятно что нормализировать, ну и дальше тоже
"слово" это для примера, например в таблице 1 может быть "вася в машине", "Мама на кухне" любые выражения
и получается нужно пройтись по записям и выбирать все слова?
...
Рейтинг: 0 / 0
13.06.2017, 09:01
    #39470686
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос поиск по строкам
tadeyilodaполучается нужно пройтись по записям
Забудьте свои процедурные подходы. Не на бэйсике пишете.

Шаблон:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
SELECT t4.id2 phrase_id
FROM ( SELECT t1.id id1, t2.id id2, COUNT(t2.id) cnt
       FROM words t1, phrases t2
       WHERE INSTR(t2.text, t1.word)
       GROUP BY t1.id, t2.id ) t4,
     ( SELECT t3.id, COUNT(t3.id) cnt
       FROM words t3
       GROUP BY t3.id ) t5
WHERE t4.id1 = t5.id AND t4.cnt = t5.cnt


где words - нормализованная таблица токенов, phrase - таблица тестируемых наборов токенов.
...
Рейтинг: 0 / 0
13.06.2017, 09:02
    #39470687
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос поиск по строкам
PS. В первом подзапросе скорее всего нужно изменить текст так, чтобы исключить нахождение субтокенов.
...
Рейтинг: 0 / 0
13.06.2017, 13:11
    #39470909
tadeyiloda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос поиск по строкам
опять не понятно
как нормализовать первую таблицу?
...
Рейтинг: 0 / 0
13.06.2017, 14:31
    #39470980
tadeyiloda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос поиск по строкам
допустим в таблице 1 такие значения
id text1 мама на кухне2 книга на столе
значит нормализованная таблица будет такой
idanswer_id text11мама21на31кухне42книга52на62столе
...
Рейтинг: 0 / 0
13.06.2017, 14:33
    #39470984
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос поиск по строкам
Верно.
...
Рейтинг: 0 / 0
13.06.2017, 17:07
    #39471075
tadeyiloda
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос поиск по строкам
спасибо, все работает
только запрос 20559395 пришлось допиливать
немного непривычное решение
если нужно было искать только по одной фразе то тут все просто делается через match against ('+каждое +нужное +слово')
...
Рейтинг: 0 / 0
14.06.2017, 08:02
    #39471240
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос поиск по строкам
tadeyilodaтолько запрос 20559395 пришлось допиливать
Это ожидаемо - был дан шаблон, к тому же построенный так, чтобы была видна логика его построения.

tadeyilodaнемного непривычное решение
Вы просто не перешли ещё от мышления программиста к мышлению SQL-щика. Если у первого - итерации по одной записи за шаг, то у второго - работа со всем массивом как единым целым.

tadeyilodaвсе работает
В варианте, показанном в шаблоне, есть один большой недостаток - одно слово может быть частью другого (как подстрока), и будут ложные срабатывания. Лечится, конечно, обычно - вводом фэйк-разделителей, но по ресурсам получается очень накладно.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / запрос поиск по строкам / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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