SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 30.05.2010 19:10:04

gumk
Участник
Зарегистрирован: 30.05.2010
Сообщений: 3

Поиск по количеству совпадений

вот такая задача стоит:
есть база данных
__________________________________
uid | a1 | a2 | b1 | b2 | c1 | c2
----------------------------------

как можно сделать sql запрос, чтобы:
поиск по пользователю имеющего характеристики A1, A2, B1, B2, C1, C2
необходимо сравнить:
A1 c a1, a2
A2 c a1, a2
B1 c b1, b2
B2 c b1, b2
C1 c c1, c2
C2 c c1, c2

затем сортировать результат начиная с наименьшего количества совпадений.
Возможно ли такое реализовать? Если возможно то как?

Неактивен

 

#2 30.05.2010 21:43:38

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Поиск по количеству совпадений

Есть вот такой корявый способ:

SELECT ...
FROM table
WHERE
    a1 = 'А1' OR
    a2 = 'A2' OR
    ...
ORDER BY ((a1 = 'A1') + (a2 = 'A2') + ... ) ASC
 

   
Менее корявый в голову не приходит...

Неактивен

 

#3 01.06.2010 18:10:52

gumk
Участник
Зарегистрирован: 30.05.2010
Сообщений: 3

Re: Поиск по количеству совпадений

Спасибо, а вот такой еще вопрос

можно ли сделать такой поиск:
в таблице столбец, допустим index, в ней содержаться строки типа:

a1 a6 b3 b4 c9 c5

можно ли как нибудь сделать строковый поиск по этому столбцу с сортировкой по релевантности (релевантность зависит только от количества совпадений), например проводим поиск с данными a2 a6 b3 b6 c5 c7

как это лучше делать через LIKE ?

Неактивен

 

#4 01.06.2010 20:34:08

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Поиск по количеству совпадений

Можно с помощью строковых функций делить строку по пробелам и сравнивать, но это будет очень медленно работать и неудобно поддерживать. Лучше сделать 6 столбцов.

Неактивен

 

#5 01.06.2010 20:38:13

gumk
Участник
Зарегистрирован: 30.05.2010
Сообщений: 3

Re: Поиск по количеству совпадений

Тоесть

'SELECT *
FROM love
WHERE MATCH ({indexes})
AGAINST (%b IN BOOLEAN MODE)'
,  str_replace('+', ' ', $seach)


где $seach = 'a1+a4+b4+b7+c6+c7';
 

будет работать медленнее, чем 6 столбцов и
SELECT  ...
FROM table
WHERE
    a1 = 'А1' OR
    a2 = 'A2' OR
    ...
ORDER BY ((a1 = 'A1') + (a2 = 'A2') + ... ) ASC
?

Отредактированно gumk (01.06.2010 20:38:41)

Неактивен

 

#6 04.06.2010 02:22:46

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Поиск по количеству совпадений

А еще можно использовать полнотекстовый индекс. MATCH() выдает вполне
себе релевантность wink

Ну и в случае с LIKE — через 6 столбцов может быть быстрее, если хорошие
индексы.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson