表A
--ID 自增ID
--KeyName 关键名
--查找优先级
ID KeyName Priority
1  %ab%cd%   0
2  %ab%      1
3  %cd%      2
表B
--ID 自增ID
--Name 名
ID Name
1  abcd
2  cdab
3  *jsjabcd
4  33ab44cd
5  dfdaldj能根据A表的匹配关键词查B表,要求按关键名优先级排结果为,匹配度高的排前。
如abcd完全匹配排最上,排完表B如下ID Name
1  abcd
3  *jsjabcd
4  33ab44cd
2  cdab

解决方案 »

  1.   

    mysql> select * from a;
    +------+---------+----------+
    | ID   | KeyName | Priority |
    +------+---------+----------+
    |    1 | %ab%cd% |        0 |
    |    2 | %ab%    |        1 |
    |    3 | %cd%    |        2 |
    +------+---------+----------+
    3 rows in set (0.08 sec)mysql> select * from b;
    +------+----------+
    | ID   | Name     |
    +------+----------+
    |    1 | abcd     |
    |    2 | cdab     |
    |    3 | *jsjabcd |
    |    4 | 33ab44cd |
    |    5 | dfdaldj  |
    +------+----------+
    5 rows in set (0.00 sec)mysql> select b.ID,b.Name
        -> from a , b
        -> where b.Name like a.KeyName
        -> group by b.ID,b.Name
        -> order by min(Priority);
    +------+----------+
    | ID   | Name     |
    +------+----------+
    |    1 | abcd     |
    |    3 | *jsjabcd |
    |    4 | 33ab44cd |
    |    2 | cdab     |
    +------+----------+
    4 rows in set (0.08 sec)mysql>
      

  2.   

    SELECT b.ID,b.Name FROM ba1 a INNER JOIN bb2 b ON b.Name LIKE a.KeyName
    GROUP BY b.ID,b.Name
    ORDER BY MIN(a.Priority)