Как использовать INNER JOIN в этом примере

0

Я узнаю о соединениях 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

  • 0
    @gordon-linoff Гордон-Линофф правильно; Вы должны объединить объединенные данные в один столбец. SQL невероятно мощный, но он не справляется с неровными строками легко.
Теги:
join

1 ответ

5
Лучший ответ

Этот запрос:

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;
  • 0
    мне нравится второй пример, но могу ли я получить теги без конкатенации? я имею в виду отдельные массивы?
  • 0
    @ Гидар. , , В MySQL нет такой вещи, как массив.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню