Задавайте вопросы, мы ответим
Вы не зашли.
вот такая задача стоит:
есть база данных
__________________________________
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
затем сортировать результат начиная с наименьшего количества совпадений.
Возможно ли такое реализовать? Если возможно то как?
Неактивен
Есть вот такой корявый способ:
SELECT ...
FROM table
WHERE
a1 = 'А1' OR
a2 = 'A2' OR
...
ORDER BY ((a1 = 'A1') + (a2 = 'A2') + ... ) ASC
Менее корявый в голову не приходит...
Неактивен
Спасибо, а вот такой еще вопрос
можно ли сделать такой поиск:
в таблице столбец, допустим index, в ней содержаться строки типа:
a1 a6 b3 b4 c9 c5
можно ли как нибудь сделать строковый поиск по этому столбцу с сортировкой по релевантности (релевантность зависит только от количества совпадений), например проводим поиск с данными a2 a6 b3 b6 c5 c7
как это лучше делать через LIKE ?
Неактивен
Можно с помощью строковых функций делить строку по пробелам и сравнивать, но это будет очень медленно работать и неудобно поддерживать. Лучше сделать 6 столбцов.
Неактивен
Тоесть
Отредактированно gumk (01.06.2010 20:38:41)
Неактивен
А еще можно использовать полнотекстовый индекс. MATCH() выдает вполне
себе релевантность
Ну и в случае с LIKE — через 6 столбцов может быть быстрее, если хорошие
индексы.
Неактивен