我在mysql查询中遇到问题。我的表格如下所示:
mysql> select username, specialty from users;
+----------+------------------+
| username | specialty |
+----------+------------------+
| JinkX | php, html, mysql |
| test1 | html |
+----------+------------------+
mysql> select name, tags from tasks;
+----------------+------+
| name | tags |
+----------------+------+
| fix front page | html |
+----------------+------+当我尝试执行以下查询时,只有当专业知识与标签完全相同时,它才能正常工作。但我希望它在这两个方面都有效
mysql> select tasks.name from users left join tasks on tasks.tags LIKE users.specialty where users.username = 'test1';
+----------------+
| name |
+----------------+
| fix front page |
+----------------+
mysql> select tasks.name from users left join tasks on tasks.tags LIKE users.specialty where users.username = 'JinkX';
+------+
| name |
+------+
| NULL |
+------+发布于 2011-02-09 00:02:02
那么,您已经发现了将独立值保存为逗号分隔字符串的痛苦。
如果可以,我建议您更改数据结构,从user表中获取structure列,并创建一个新的user_specialty表,其中包含指向users.username和tasks.tags的外键。
+----------+------------------+
| username | tag |
+----------+------------------+
| JinkX | php |
| JinkX | html |
| JinkX | mysql |
| test1 | html |
+----------+------------------+发布于 2011-02-08 23:55:22
你做错了like。
尝试此查询:
select tasks.name
from users left join tasks on users.specialty LIKE CONCAT('%',tasks.tags,'%')
where users.username = 'JinkX'这不是最好的方式,但它应该可以工作
编辑:根据评论,有另一种方法应该更好
使用REGEXP:
select tasks.name
from users left join tasks on users.specialty REGEXP CONCAT('(^|,) ?',tasks.tags,' ?($|,)')
where users.username = 'JinkX'发布于 2011-02-09 00:01:56
https://stackoverflow.com/questions/4935188
复制相似问题