Movatterモバイル変換


[0]ホーム

URL:


BLOGTIMES

cles::blog

平常心是道
« :: »
2016/11/12

MySQL で implode() のようなことがしたい

  mysql  php 
このエントリーをはてなブックマークに追加

MySQL (MariaDB)で PHP で言うところのimplode() をやりたいと思っていろいろ調べてみたら、GROUP_CONCAT()*1 を使えば一撃で実現できることが分かったのでメモ。

例えば以下のようなテーブルがあったときに GROUP_CONCAT() を使うとこんな感じになります。
GROUP_CONCAT() には DISTINCT や ORDER BY が効くところもポイントです。

SELECT * FROM foo;+---+| a |+---+| 1 || 2 || 3 || 4 || 5 || 6 |+---+
SELECT GROUP_CONCAT(a ORDER BY a DESC SEPARATOR ',') AS aaaaa FROM foo;+-------------+| aaaaa |+-------------+| 6,5,4,3,2,1 |+-------------+

カンマ区切りのデータの検索は FIND_IN_SET() で

カンマ区切りになった1つのフィールドから、一致するデータの個数を返してくれるのがFIND_IN_SET()*2

真っ当な正規化を行っていればこんな関数のお世話になる機会はないはずですが、テーブル設計の時に「どうせ検索条件としてこのフィールドは使わないはずだから、非正規形のままカンマ区切りでフィールドにいれちゃえ」なんていう無精をしたりするとお世話になることがあります。真っ当な解決方法としてはテーブル構造を正規化することですが、それがイヤな場合はFULLTEXT インデックスを使ったりしていましたが、一番お手軽に解決できるのが FIND_IN_SET() です。パフォーマンス的にはアレかもしれないので注意は必要ですけどね。

実際の例としては以下のような感じになります。FIND_IN_SET() の第1引数は検索する文字列第2引数はカンマ区切りの文字列で、返り値は見つかった個数(見つからないときは 0 )になります。GROUP_CONCAT() と違ってセパレーターが指定できないので、元になる文字列の構造には注意が必要です。

SELECT FIND_IN_SET('2','1,2,3,2,4,5,6') AS result;+--------+| result |+--------+| 2 |+--------+

byhsur at 13:46[5年前][4年前][3年前][2年前][1年前][1年後][2年後][3年後][4年後][5年後] |
こんな記事もあります 「正規化 FULLTEXT CSV
2021 年の人気エントリ Top 100
CSV 専用エディタ CSV+
Subversion Edge にまとめてユーザー登録する
2020 年の人気エントリ Top 100
2019 年の人気検索フレーズ Top 100
2019 年の人気エントリ Top 100
2018 年の人気検索フレーズ Top100
2018 年の人気エントリ Top100
コマンドラインからインターネットのスピードテストがしたい
WP All Import でエントリを一括インポート
トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/8928
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL:Yahoo! JAPAN IDでログイン

« :: »
Copyright © 2004-2023 by CLES All Rights Reserved.
サイト内検索
検索ワードランキング
へぇが多いエントリ
閲覧数が多いエントリ
1 .アーロンチェアのポスチャーフィットを修理(99679)
2 .年次の人間ドックへ(99091)
3 .福岡銀がデマの投稿者への刑事告訴を検討中(99081)
4 .三菱鉛筆がラミーを買収(98691)
5 .2023 年分の確定申告完了!(1つめ)(98660)
最新のエントリ
cles::blogについて
誰が書いてる?
最近行った場所
サイトポリシー
タグ一覧
検索ワードランキング

Referrers

    Powered by CLES
    Nucleus CMS v3.31SP3/w memcached
    21375633(W:6258 Y:1545 T:1452)
    cles::blogのはてなブックマーク数
    benchmark


    [8]ページ先頭

    ©2009-2025 Movatter.jp