Сотртировка по "похожести"

Iron

Guest
Сортировка по "похожести"

Сабж не совсем отображает, то что мне надо...

Вопрос:
В таблице есть куча полей (штук 30). Каждое из них имеет ограниченное и постоянное кол-во значений(например от 0 до 14). Нужно сделать так чтобы сначало отображались(если такие есть) записи с полным совпадением с заданными параметрами. А дальше выводилсь записи по степени схожости с заданными параметрами, т.е. чем больше совпадений, тем выше запись.

Можно ли такое осуществить средствами MySQL 1-2 запросами?

Спасибо.
 

Iron

Guest
В принципе, это работать должно, но тогда полю надо будет задавать тип TEXT, в то время как оно будет содержать 1, 2, максимум три цифорки, т.е. напрашивается поле int.
А запрс должен будет выглядеть так:

SELECT *, MATCH field1 AGAINST ('7')+MATCH field2 AGAINST ('7') as relev FROM table ORDER BY relev DESC

А поля field1=3(например); field2=7(например)


По моему это не очень правильно. Да и размер базы ВЫРАСТЕТ.

Или я то-то не так понял?
 

Кром

Новичок
Для двух трех цифр лучше использовать LIKE, FULLTEXT будет не к месту.
Что-то в этом роде, думаю тебе подойдет.
PHP:
$num = '222';
$QUERY = 'SELECT ID AS ID,
IF (ID LIKE "'.$num.'", 4, 0) +
IF (ID LIKE "'.$num.'%", 3, 0) +
IF (ID LIKE "%'.$num.'", 2, 0) +
IF (ID LIKE "%'.$num.'%", 1, 0) AS relevance
FROM `tb_stat` WHERE ID LIKE "%'.$num.'%"
ORDER BY relevance DESC ';
 

chira

Новичок
Код:
mysql> select * from a;
+----+---------------+------+------+
| id | name          | n2   | n3   |
+----+---------------+------+------+
|  1 | ssssss        | ddd  | ss   |
|  2 | wwwwwwwwwww   | ddd  | ss   |
|  3 | wwwweeeeeeeee | ddrd | sss  |
|  4 | qqqqqq        | ddd  | ss   |
+----+---------------+------+------+
4 rows in set (0.00 sec)

mysql> select (name='ssssss')+(n2='ddd')+(n3='ss') as cn ,id from a order by 1 desc;
+------+----+
| cn   | id |
+------+----+
|    3 |  1 |
|    2 |  2 |
|    2 |  4 |
|    0 |  3 |
+------+----+
4 rows in set (0.00 sec)
 
Сверху