MySQL;获取所有卡片&;在一个请求中与每张卡关联的所有组
我希望能够看到每张牌组中有一张牌,并显示如下。 一张牌可以有多张牌组。将会有很多卡片/套牌。 服务器是用php编写的MySQL;获取所有卡片&;在一个请求中与每张卡关联的所有组,mysql,join,group-concat,Mysql,Join,Group Concat,我希望能够看到每张牌组中有一张牌,并显示如下。 一张牌可以有多张牌组。将会有很多卡片/套牌。 服务器是用php编写的 |List of cards| In decks | |-------------|-------------------| |CardA |DeckA, DeckC | |CardB |DeckC, DeckF, DeckY| |CardC | | 数据库如下所示: C
|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`
;
因
您对数据库的api调用可以返回您需要的任何内容。。。。除了此数据结构之外,您还有其他代码要显示吗?请使用join+group\u concatthanks FelippeDuarte它可以工作:)
+===========+=============+
| card_name | deck_names |
+===========+=============+
| CardA | DeckA,DeckB |
+-----------+-------------+
| CardB | DeckC,DeckE |
+-----------+-------------+
| CardC | |
+-----------+-------------+