Mysql получает данные отношения многие ко многим подряд - PullRequest
0 голосов
/ 31 января 2012

Привет, у меня, казалось бы, простая проблема, из-за которой болит голова.

У меня есть три таблицы в базе данных 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    |                |
+---------+--------------+------+-----+---------+----------------+

Ключевые слова статьи (через таблицу):

+------------+---------+------+-----+---------+----------------+
| 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 или для этого придется использовать язык сценариев?

Любая помощь высоко ценится.

Ответы [ 3 ]

1 голос
/ 31 января 2012
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
0 голосов
/ 31 января 2012
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
0 голосов
/ 31 января 2012

Возможно ли это даже в MySQL или для этого придется использовать язык сценариев?

Вы не думали, что непрограммист может редактировать данные непосредственно в консоли mysqlили phpmyadmin, не так ли?

Очевидно, вам нужно создать страницу для этого (например, в PHP).

SQL, чтобы выбрать страницу со всеми ее ключевыми словами, довольно тривиально.Я уверен, что вы это знаете.Итак, возьмите книгу по PHP и начните создавать эту страницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...