• 締切済み

PHP+MySQLで以下のような処理を作りたいのですが

テーブルAに列Bがあり、 列Bは<自然数><区切記号>・・・<自然数><区切記号><自然数> という形のデータを持ちます。 列Bの各行に対してデータを<区切記号>でsplitして 得られる自然数の列をn(0),・・・n(k)とします。 * kの値(=自然数の個数)は行によって変わります (kは一定ではありません) テーブルAのレコードセットを order by n(0),・・・,n(k)で並び替えたいです。 このような処理をPHPコードで実装したいのですが どのようにしたらよいか考え方だけでも教えていただければ幸いです。

みんなの回答

  • bioche
  • ベストアンサー率50% (4/8)
回答No.3

いろいろ 方法はあると思いますが、 データセットを 1.列B以外の区切り文字で 1つの文字列にして (以下ソート用キー作成) 2.列Bをスプリット 3.列Bのnの最大値とkの最大値を調べて桁をあわせつなげてしまう 1,2,12,300・・・kの最大→ 001002012300・・・kの最大 これを1の文字列の最初に挿入 配列にする array sort ソート用キーを取り除く。 こんな感じ?? データが膨大なら テーブルに sortkeyフィールド作って 上のソートキー入れて order by のほうがいいと思います。

回答No.2

一対多のデータを何とか一つのテーブルに入れ込もうとしてるって感じですかね。 普通に考えると単にorder by 列Bでいいんじゃないですか?但しその際自然数の桁数を揃える必要がありますけどね。単なる文字列ソートなので、それで正しいかどうか頭の中でシミュレートしてみて下さい。

回答No.1

いったいどんな処理だと思いつつ 列Bのデータをsplitせず <区切記号>がコンマ以外の場合、str_replaceで区切り記号をコンマ変換 その文字列を、order by の後に加えてクエリー文を完成させればいんじゃないの?

関連するQ&A