[英]using LEFT JOIN and LIKE mysql
我在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 |
+------+
你做的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'
好吧,你已經發現了將獨立值保存為逗號分隔字符串的痛苦。
如果可以,我建議您更改數據結構,從用戶表中獲取專業列,並創建一個新的user_specialty
表,該表具有users.username
和tasks.tags
外鍵。
+----------+------------------+
| username | tag |
+----------+------------------+
| JinkX | php |
| JinkX | html |
| JinkX | mysql |
| test1 | html |
+----------+------------------+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.