powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите сделать выборку.
3 сообщений из 3, страница 1 из 1
Помогите сделать выборку.
    #39316036
Lanmark
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Нужен совет и помощь от знающих.

Есть таблица

idformalname fullname level1переделкино в селе переделкино сгорела дача 502клюковское в районе мирном были видны корабли 93корабли в речке затонули корабли504сад в кооперативе все хорошо85кристофер Корабли отплыли 96недалеко от бобруйска село переделкино снова на первой полосе 9

Нужно сделать выборку:

1. Находим все записи у которых level=50 и level=9
2. Сравниваем столбцы Formalname у которых level=50 с столбцами Fullname у которых level=9. выводим id совпавших записей.

Дело в том что в столбце fullname(level=9) может быть все что угодно, но если есть совпадение хотя-бы одного слова, с словом в столбце formalname(level=50) то эта запись должна попасть в выборку.

В данном примере результат должен быть:

id256

Из за отсутствия опыта и знаний не могу понять даже с чего начать, Отбор по Level сделать можно с помощью case, но вот сравнение значений... для меня не понятно.
З.Ы. в реальной таблице подобных записей миллионы. Так что перечислять с помощью Like значения из столбца formalname не вариант.
...
Рейтинг: 0 / 0
Помогите сделать выборку.
    #39316051
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lanmarkесли есть совпадение хотя-бы одного слова
Опасная тенденция... у тебя в formalname есть предлоги, а они тоже слова, рискуешь наиметь хренову гору "косых" пар.

При такой постановке задачи рекомендую написать собственную функцию сравнения двух значений, дающую True, если в них имеется общее слово, с учётом вменяемых ограничений (например, слово должно быть длиннее 3 символов). Типа
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public function my_compare(str1, as string, str2 as string) as boolean
dim tmp() as string, i as integer
my_compare=false
tmp = split(str1, " ")
for i = lbound(tmp) to ubound(tmp)
  if len(tmp(i))>3 and instr(str2,tmp(i)) > 0 then
    my_compare=true
    exit sub
  end if
next i
end function

и использовать её в запросе:
Код: sql
1.
2.
3.
4.
5.
select t1.id
from [table] as t1, [table] as t2
where t1.level=50
  and t2.level=9
  and my_compare(t1.formalname,t2.fullname)


Конечно, функцию надо доработать - организовать замену знаков препинания на пробелы и организовать поиск только целых слов.
...
Рейтинг: 0 / 0
Помогите сделать выборку.
    #39316053
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс, сорри, чёта не посмотрел раздел, писал ответ как для Access... но на суть это не влияет, только язык кода будет другой, а функцию можно сотворить прямо на сервере.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите сделать выборку.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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