您好,欢迎访问一九零五行业门户网

mysql 按相似度来排序

数据库tag字段内容格式:a,b,c,d ...
假设有这几条记录
1:刘世允
2:郑胜浩
3:申东烨
4: 申东烨,郑胜浩,刘世允,安英美
5: 郑胜浩,刘世允,安英美
6: 申东烨,郑胜浩
7:刘世允,安英美
给出的查询tag
$tag = '申东烨,郑胜浩,刘世允,安英美,李尚勋';
按照相同词的个数排序
查询的结果
1: 申东烨,郑胜浩,刘世允,安英美
2: 郑胜浩,刘世允,安英美
3: 申东烨,郑胜浩
4:刘世允,安英美
5:刘世允
6:郑胜浩
7:申东烨
回复内容: 数据库tag字段内容格式:a,b,c,d ...
假设有这几条记录
1:刘世允
2:郑胜浩
3:申东烨
4: 申东烨,郑胜浩,刘世允,安英美
5: 郑胜浩,刘世允,安英美
6: 申东烨,郑胜浩
7:刘世允,安英美
给出的查询tag
$tag = '申东烨,郑胜浩,刘世允,安英美,李尚勋';
按照相同词的个数排序
查询的结果
1: 申东烨,郑胜浩,刘世允,安英美
2: 郑胜浩,刘世允,安英美
3: 申东烨,郑胜浩
4:刘世允,安英美
5:刘世允
6:郑胜浩
7:申东烨
----------------建表
mysql> create table testsort (tag varchar(100) charset gbk);query ok, 0 rows affected (0.51 sec)
```sql
mysql> describe testsort
-> ;
+-------+--------------+------+-----+---------+-------+
| field | type | null | key | default | extra |
+-------+--------------+------+-----+---------+-------+
| tag | varchar(100) | yes | | null | |
+-------+--------------+------+-----+---------+-------+
1 row in set (0.07 sec)
----------------插入数据```sqlmysql> insert into testsort(id,tag) values(1,刘世允), -> (2,郑胜浩), -> (3,申东烨), -> (4,申东烨,郑胜浩,刘世允,安英美), -> (5,郑胜浩,刘世允,安英美), -> (6,申东烨,郑胜浩), -> (7,刘世允,安英美);query ok, 7 rows affected (0.07 sec)records: 7 duplicates: 0 warnings: 0
----------------方法
mysql> select id, -> tag, -> char_length(tag)-char_length(replace(tag,',',''))+1 as cnt -> from testsort;+------+-----------------------------------------+------+| id | tag | cnt |+------+-----------------------------------------+------+| 1 | 刘世允 | 1 || 2 | 郑胜浩 | 1 || 3 | 申东烨 | 1 || 4 | 申东烨,郑胜浩,刘世允,安英美 | 4 || 5 | 郑胜浩,刘世允,安英美 | 3 || 6 | 申东烨,郑胜浩 | 2 || 7 | 刘世允,安英美 | 2 |+------+-----------------------------------------+------+7 rows in set (0.00 sec)
----------------另外注意
responses below will get you there. however, don't forget to use char_length() instead of length() if you're using multibyte characters. – inhan sep 10 '12 at 3:03
http://stackoverflow.com/questions/12344795/count-the-number-of-occurences-of-a-string-in-a-varchar-field
其它类似信息

推荐信息