0

MySQLで少し苦労しています。自分のニーズに合った機能を見つけたのGROUP_CONCATですが、使い方がわかりません。私がやりたいのは、いくつかの列と連結列で検索することです。そのため、列のいずれかが私の検索語 (%a%この例では) と等しい場合、それが返されます。連結されたジャンル文字列を返す方法を考え出しましたが、それを検索する方法がわかりません。

SELECT albumArtworkURL, albumName, albumID, 
  b.artistID AS ArtistID, b.artistName AS ArtistName,
  GROUP_CONCAT(DISTINCT c.songGenre separator ',') AS genres
FROM album
LEFT JOIN artist b ON album.albumArtist = b.artistID
LEFT JOIN song c ON albumID = c.songOnAlbum
WHERE albumName LIKE '%a%' OR albumYear LIKE '%a%'
GROUP BY albumArtworkURL, albumName, albumID, ArtistID, ArtistName
ORDER BY albumYear ASC, albumName ASC

助けていただければ幸いです。ありがとう :-)

4

2 に答える 2

3

GROUP_CONCAT から結果を検索するには、その述語を HAVING 句に含める必要があります。これは、GROUP BY の後、ORDER BY の前に表示する必要があります。

HAVING genres LIKE '%a%'

行がアクセスされているとき、つまり ON 句と WHERE 句の述語が評価されているときは、GROUP_CONCAT 式の値を使用できないことに注意してください。その式は、結果セットが準備されるまで使用できません。そのため、述語を HAVING 句に含める必要があります。(HAVING 句は、LIMIT 句が適用される前、およびおそらく ORDER BY を満たすための並べ替え操作の前に、実行計画の非常に遅い段階で処理されます。)

于 2013-01-23T23:23:49.093 に答える
2

の結果を検索する場合はGROUP_CONCAT()、クエリを別の選択でラップできます。

SELECT *
FROM
(
  SELECT albumArtworkURL, 
    albumName, 
    albumID, 
    b.artistID AS ArtistID, 
    b.artistName AS ArtistName,
    GROUP_CONCAT(DISTINCT c.songGenre separator ',') AS genres
  FROM album
  LEFT JOIN artist b 
    ON album.albumArtist = b.artistID
  LEFT JOIN song c 
    ON albumID = c.songOnAlbum
  GROUP BY albumArtworkURL, albumName, albumID, ArtistID, ArtistName
) src
WHERE albumName LIKE '%a%' 
  OR albumYear LIKE '%a%'
  OR genres LIKE  '%a%'
ORDER BY albumYear ASC, albumName ASC

songGenreしかし、あなたの説明に何かが欠けていない限り、連結バージョンの代わりに単に検索できない理由がわかりません。

SELECT albumArtworkURL, 
  albumName, 
  albumID, 
  b.artistID AS ArtistID, 
  b.artistName AS ArtistName,
  GROUP_CONCAT(DISTINCT c.songGenre separator ',') AS genres
FROM album
LEFT JOIN artist b 
  ON album.albumArtist = b.artistID
LEFT JOIN song c 
  ON albumID = c.songOnAlbum
WHERE albumName LIKE '%a%' 
  OR albumYear LIKE '%a%'
  OR songGenre LIKE '%a%'
GROUP BY albumArtworkURL, albumName, albumID, ArtistID, ArtistName
ORDER BY albumYear ASC, albumName ASC
于 2013-01-23T23:26:18.653 に答える