我在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 |
+------+
答案 0 :(得分:9)
你正在做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'
答案 1 :(得分:6)
嗯,你已经发现了将独立值保存为逗号分隔字符串的痛苦。
如果可以,我建议您更改数据结构,从用户表中获取专业列,并创建一个新的user_specialty
表,该表具有users.username
和{的外键{1}}。
tasks.tags
答案 2 :(得分:2)