我有以下格式的表格:
id | title
---+----------------------------
1 | php jobs, usa
3 | usa, php, jobs
4 | ca, mysql developer
5 | developer
我想在标题字段中获取最受欢迎的关键字,请指导。
如果您有关键字列表,则可以执行以下操作:
select kw.keyword, count(*)
from t cross join
keywords kw
on concat(', ', t.title, ',') like concat(', ', kw.keyword, ',')
但是,正如其他人所提到的,您有一个非关系数据库设计。标题中的关键字应存储在单独的行中,而不是作为逗号分隔的列表。
如果您的数据很小(几十万行或更少),您可以将其放入 Excel,使用文本到列功能,重新排列关键字,并在数据库中创建一个新的、更好的表。
SELECT title 1, COUNT(*) FROM table GROUP BY title 1
编辑
由于您已经编辑并呈现了一个非标准化表格,我建议您对其进行标准化。
您需要修改您的数据库。你应该有这样的东西:
items
+----+---------------+
| id | title |
+----+---------------+
| 1 | something |
| 3 | another thing |
| 4 | yet another |
| 5 | one last one |
+----+---------------+
keywords
+----+-----------------+
| id | keyword |
+----+-----------------+
| 1 | php jobs |
| 2 | usa |
| 3 | php |
| 4 | jobs |
| 5 | ca |
| 6 | mysql developer |
| 7 | developer |
+----+-----------------+
items_to_keywords
+---------+------------+
| item_id | keyword_id |
+---------+------------+
| 1 | 1 |
| 1 | 2 |
| 3 | 2 |
| 3 | 3 |
| 3 | 4 |
| 4 | 5 |
| 4 | 6 |
| 5 | 7 |
+---------+------------+
你看到优势了吗?建立关系的能力是你应该在这里利用的。