Я узнаю о соединениях mysql, и у меня есть простой вопрос:
У меня есть одна база данных и две таблицы blogs
и tags
блог:
MariaDB [cvv]> describe blogs;
+--------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| slug | varchar(255) | YES | | NULL | |
| title | varchar(255) | YES | | NULL | |
| content | text | YES | | NULL | |
| created_at | datetime | YES | | NULL | |
| updated_at | datetime | YES | | NULL | |
| user_id | int(11) | YES | | NULL | |
| is_published | tinyint(1) | YES | | NULL | |
+--------------+--------------+------+-----+---------+----------------+
8 rows in set (0.00 sec)
теги:
MariaDB [cvv]> describe tags;
+---------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(15) | YES | | NULL | |
| blog_id | int(11) | YES | MUL | NULL | |
+---------+-------------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
В основном я пытаюсь извлечь блог и его теги, используя:
SELECT blogs.id, blogs.title tags.name as tags FROM blogs INNER JOIN tags ON blogs.id = tags.blog_id
Но этот запрос не возвращает более 1 тега за раз.
например, я создал идентификатор блога, название... и в теге я создал два тега, и у них обоих есть blog_id
из 1, поэтому мне нужно получить идентификатор блога, blog_id
два тега, но я его получаю только.
Кроме того, я сделал ссылку в таблице tags
с именем ограничения blog_id
ссылающимся на идентификатор блога, т.е.: blog.id
Этот запрос:
SELECT b.id, b.title, t.name as tags
FROM blogs b INNER JOIN
tags t
ON b.id = t.blog_id ;
Должно возвращаться несколько строк, с одной парой блога/тега на строку.
Если вы хотите, чтобы все теги для блога в одной строке, вам нужно собрать результаты:
SELECT b.id, b.title, GROUP_CONCAT(t.name) as tags
FROM blogs b INNER JOIN
tags t
ON b.id = t.blog_id
GROUP BY b.id, b.title;