2

我有以下格式的表格:

id | title
---+----------------------------
1  | php jobs, usa
3  | usa, php, jobs
4  | ca, mysql developer
5  | developer

我想在标题字段中获取最受欢迎的关键字,请指导。

4

4 回答 4

1

如果您有关键字列表,则可以执行以下操作:

select kw.keyword, count(*)
from t cross join
     keywords kw
     on concat(', ', t.title, ',') like concat(', ', kw.keyword, ',')

但是,正如其他人所提到的,您有一个非关系数据库设计。标题中的关键字应存储在单独的行中,而不是作为逗号分隔的列表。

如果您的数据很小(几十万行或更少),您可以将其放入 Excel,使用文本到列功能,重新排列关键字,并在数据库中创建一个新的、更好的表。

于 2012-06-26T14:24:55.183 回答
1
SELECT title 1, COUNT(*) FROM table GROUP BY title 1

编辑

由于您已经编辑并呈现了一个非标准化表格,我建议您对其进行标准化。

于 2012-06-26T14:14:59.770 回答
0

阅读:http ://blog.fedecarg.com/2009/02/22/mysql-split-string-function/

于 2012-06-26T14:18:22.633 回答
0

您需要修改您的数据库。你应该有这样的东西:

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          |
+---------+------------+

你看到优势了吗?建立关系的能力是你应该在这里利用的。

于 2012-06-26T14:27:05.530 回答