我正在使用 MySql 5.1 并正在构建我的第一个多对多数据库。我理解这些概念,我有 3 个表:
相册
,具有唯一 ID流派
,具有唯一 IDalbum_genres
包含专辑和流派中每个 ID 的列。
我遇到的问题是,一张专辑当然可以有多种流派。但当我进行搜索时,我对如何构建它一无所知,因此在搜索过程中,我得到了每张专辑的所有流派。请注意,这不是加载 1 个专辑,而是进行搜索以获取 1 个或多个专辑。
抱歉,我没有任何东西可以展示我所尝试过的内容,因为我什至不知道从哪里开始。
我确信这很容易。但我能找到的所有教程都只涉及 M2M 的基础知识,而不涉及如何获取多个匹配条目。
在查看了许多很棒的建议后,我构建了这个查询:
SELECT
album.album_title,
Concat(genre.genre_id, ',') as GenreName,
count(album.album_id) as GenreCount
FROM $this->album_tbl album
JOIN wp_musicmgr_albgnr albgnr ON albgnr.albgnr_album_fk = album.album_id
JOIN $this->genre_tbl genre ON genre.genre_id = albgnr.albgnr_genre_fk
GROUP BY album.album_id
哪个产生了这个:
[0] => stdClass Object
(
[album_title] => album q
[GenreName] => 1,
[GenreCount] => 3
)
However, as you can see. Despite having a count of 3 hits on genres, it is listing the first one.
最佳答案
如果我遇到问题,你需要像这样的输出
AlbumName | Genre1,Genre2.........
为此,您需要使用GroupBy
SELECT A.album_name as AlbumName, GROUP_CONCAT(G.genre_name) as GenreName, count(A.ID) as GenreCount
FROM Album A
JOIN album_genres AG
ON (A.ID = AG.album_ID)
JOIN Genre G
ON (G.ID = AG.genre_ID)
Group by A.ID
关于mysql - 如何在MySql中进行多对多子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20415101/