MySQL;在一个请求中获取与每张卡片关联的所有卡片和所有卡片组

MySQL; get all cards & all decks associated for each cards in one request

我希望能够看到一张牌所在的每个牌组,并将其显示如下。 一张牌可以在多副牌中。而且会有很多cards/decks。 服务器位于 php.

|List of cards|   In decks        |
|-------------|-------------------|
|CardA        |DeckA, DeckC       |
|CardB        |DeckC, DeckF, DeckY|
|CardC        |                   |

数据库原样:

CREATE TABLE `card` (
  `id` INT PRIMARY KEY AUTO_INCREMENT,
  `name` varchar(100) NOT NULL
);

CREATE TABLE `deck` (
  `id` INT PRIMARY KEY AUTO_INCREMENT,
  `name` varchar(100) NOT NULL
);
CREATE TABLE `deck_card` (
  `deck_id` INT NOT NULL ,
  `card_id` INT NOT NULL ,
  PRIMARY KEY (deck_id, card_id),
  FOREIGN KEY (card_id) REFERENCES card(id),
  FOREIGN KEY (deck_id) REFERENCES deck(id)
);

我想避免为每张卡都做一个请求。 有没有一种方法可以使用 MySQL 在一个请求中请求所有卡片和每个关联的套牌?

下一个简单的查询可以解决您的问题:

SELECT 
    `c`.`name` `card_name`,
    COALESCE(GROUP_CONCAT(`d`.`name`),'') `deck_names`
FROM `card` `c`
LEFT JOIN `deck_card` `dc` ON `c`.`id` = `dc`.`card_id`
LEFT JOIN `deck` `d` ON `d`.`id` = `dc`.`deck_id`
GROUP BY `c`.`name`
;

结果来自 SQLize.online

+===========+=============+
| card_name | deck_names  |
+===========+=============+
| CardA     | DeckA,DeckB |
+-----------+-------------+
| CardB     | DeckC,DeckE |
+-----------+-------------+
| CardC     |             |
+-----------+-------------+