人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQLのソートについて質問です。

[id][type][value]
1 |name |2
2 |name |1
3 |text |1

[]内がMySQLのフィールドで、その下が登録レコードとします。
typeのnameを対象にソートして

ID2
ID1

と並べ替えて出力するには、どういうSQL文を書けばよいのでしょうか?
PHPも使っていますので、PHPを組み合わせた方法だと助かります。

テスト環境は、PHP5.2.0、MySQL4.1.22です。

●質問者: kt26
●カテゴリ:ウェブ制作
✍キーワード:2.0 MySQL name PHP SQL
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● Mook
●0ポイント

とりあえず、結果と同様になる SQL です。


不明な点がありましたら、コメントください。

SELECT CONCAT('ID',value) FROM my_table WHERE type = 'name' ORDER BY id;

http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd/mysql_14.htm

◎質問者からの返答

例が説明不足で悪かったようです。すみません。


typeにnameやtextとしているのは、フィールドのソートと見立てているからなんです。

例で言うと、ORDER BY name としたいところなのですが、typeに登録されている値はフィールド値じゃないので、それが出来ません。


実際の利用方法は、phpMyAdminの「表示一覧」のように、以下のような表にし、タイトルをクリックして並べ替えたいのです。

name text
1
2
1


2 ● Mook
●80ポイント

コメントで、少しは概要がわかった気がします。


動作確認していないので、バグやタイプミスのある可能性は多大ですが、

アルゴリズムの概要として参考になるでしょうか。

<?php
// DB名、サーバ名、アカウントは適切に修正してください
$con = mysql_connect("localhost","root","password");
mysql_select_db("database_name", $con);

// type の取得
$res = mysql_query("SELECT DISTINCT type FROM my_table;",$con);
$cnt = mysql_num_rows($res);
$title = "<table border=\"1\">\n<tr>\n";
$body = "";
for( $i=0 ; $i<$cnt ; $i++ ) {
 $row = mysql_fetch_row( $res );
 $title .= "<td>".$row[0]."</td>\n";

// 各type のデータ取得
 $sub_res = mysql_query( "SELECT value FROM my_table WHERE type = '".$row[0]."' ORDER BY value;", $con);
 $sub_cnt = mysql_num_rows($sub_res);
 for( $j=0 ; $j<$sub_cnt ; $j++ ) {
$sub_row = mysql_fetch_row( $sub_res );
$body .= "<tr>\n";
$for( $k=0 ; $k< $cnt ; $k++ ) {
// 各type に該当する列だけデータを出力:他は空欄
 $body .= "<td>". ( ( $i == $j ) ? $sub_row[0] : "&nbsp;" )."</td>\n";
}
$body .= "</tr>\n";
 }
}
$title .= "</tr>\n";

echo $title.$body."</table>\n";
mysql_close($con);
?>

動作確認できたら、コメントで補足します。

◎質問者からの返答

ありがとうございます。ぜひ参考にします。


この質問をした後に自身でも調べていたのですが、PHP+MySQLで処理するよりも

Javascriptで処理した方が簡単かも知れません。(オープンソースのコードもありますし)


少し難しく考えすぎていたようです。親身になって相談いただき、ありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ