嗨,我有一个看似简单的问题,导致我的头受伤。
我在mysql数据库中有三个表,描述了文章标题和几个(可变数字)关键字之间的多对多关系。
文章:
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| volume_id | varchar(11) | NO | MUL | NULL | |
| title | longtext | NO | | NULL | |
+------------+--------------+------+-----+---------+----------------+
关键词:
+---------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| keyword | varchar(355) | NO | | NULL | |
+---------+--------------+------+-----+---------+----------------+
Article_keywords(通过表格):
+------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| article_id | int(11) | NO | MUL | NULL | |
| keyword_id | int(11) | NO | MUL | NULL | |
+------------+---------+------+-----+---------+----------------+
我想要的是一个单独的表,其中一行包含标题及其关联的关键字,以便可以由不是程序员的人编辑。当然我还需要反过来更新字段,但我认为这更直截了当。
这在MySQL中是否可行,或者必须使用脚本语言来实现这一目标?
任何帮助非常感谢。
答案 0 :(得分:1)
SELECT a.ID, a.title, c.keyword
FROM `Article` a INNER JOIN `Article_keywords` b
ON a.id = b.article_id
INNER JOIN `Keywords` c
ON b.keyword_ID = c.id
如果你想为每个标题都有一行
SELECT a.ID, a.title, GROUP_CONCAT(c.keyword) `keyword`
FROM `Article` a INNER JOIN `Article_keywords` b
ON a.id = b.article_id
INNER JOIN `Keywords` c
ON b.keyword_ID = c.id
GROUP BY a.ID
答案 1 :(得分:0)
这在MySQL中是否可行,或者必须使用脚本语言来实现这一目标?
您认为非程序员不能直接在mysql控制台或phpmyadmin中编辑数据,是吗?
显然,您需要为此创建一个页面(例如,在PHP中)。
选择包含所有关键字的页面的SQL非常简单。我相信你知道的。所以,去找一本关于PHP的书并开始构建那个页面。
答案 2 :(得分:0)
select article.id, article.title,
group_concat(keyword.keyword) keywords
from article inner join article_keyword on article_id=article.id
inner join keyword on keyword_id=keyword.id
group by article.id,article.title