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 | |
+-----------+-------------+
我希望能够看到一张牌所在的每个牌组,并将其显示如下。 一张牌可以在多副牌中。而且会有很多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 | |
+-----------+-------------+