• ベストアンサー

PHP+MySQLで(特殊な)並べ替えをしたい

例えば、ランクSS~Cの値を格納しているカラムで、 SS>S>A>B>C のような順序でソートをかけたいのですが、 カラムの増設をせずに実現できる方法はありますでしょうか。 それともランクで並べ替える用のカラムを 加えなければできないでしょうか。 なるべくなら、純粋なデータのみをDBに格納して 一機能のためだけのフィールドを作るのは 避けたいと思っているのですが。 可否がわかるかたいらっしゃいましたら お願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

「order by」で「case」を使う方法があります。 【SQL例】 select name,rank from t1 order by case rank when 'SS' then 0 when 'A' then 1 when 'B' then 2 when 'C' then 3 end, name ;

Claudia
質問者

お礼

ありがとうございます、期待通り動きました!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PHP + Mysql で特定のフィールドの値を全て表示したいのですが・・・。

    id、url、titleなどを格納してるテーブルがありまして、 全てを表示させるのはわかったのですが、 idとurlだけなどといった特定のフィールドの値を全て 表示させ方が分かりません。 検索かけて探してはいるものも、探し方が悪いのか 見つからなかったので質問してみました。 それと、phpmyadmin上では日本語の文字化けはしてないのですが ブラウザ上ではどうも文字化けしてしまいます。 utf8で格納しているはずなのですが、mysqlで表示させるときはsjisでないと文字化けします。 ちなみに照合順序はutf8_unicodeです。

  • Flash→PHP→MySQLへの値の受け渡しについて

    現在、Flashのフォームで受け取った値をPHP経由でMySQLへデータを格納するシステムを作成しています。 現在、詰まっている点とは、Flashで送信したデータがMySQLまで到達できないというところです。 少し分析してみたところ、PHPを単独でブラウザにて開くと "フィールドが取得できません。" と出力されていました。 これは、 ----- <?php $setsuzoku = mysql_connect("localhost", "*****", "*****"); if (! $setsuzoku) { die ("データベースに接続できません"); } if (! mysql_select_db ("test")) { die ("データベースが取得できません"); } mysql_query("INSERT INTO rank VALUES('".$HTTP_GET_VARS['nickname']."', ".$HTTP_GET_VARS['score']); if (!$fd) { die ("フィールドが取得できません。"); } // 処理が終わったことを知らせる print('OK'); ----- というプログラムで動かしていまして、『mysql_select_db ("test")』まで動作しているのではないかと思われます。 ですので、もしかしたらFlash以前にPHPとSQLの連携がうまくいっていないような気がするのですが…どうでしょうか? Flashからの情報を送信するシステムである以上、PHPで表示すると必ずこのような形になるのでしょうか? ちなみにMySQLには、必要なDatabaseとテーブルを作成しました。 問題の切り分けは一応してみましたが、間違っているかもしれません。何かご教授頂ければ幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • MYSQLで、ファイルを格納する方法を教えてください。

    動画ファイルの中身のバイナリデータをまるごとMYSQLのフィールドに格納したいのですが、方法が分かりません。 現在分かっていることは、データ形式をBLOB型として格納することくらいです。 SQL文から、またはC APIを使って実現する方法を教えてください。よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • PHPで、queryは何回投げるべきでしょうか

    エクセルで作ったような単純な縦横型のリレーショナル構造だとして、各列の一番大きな値を赤文字にしたいと思っています。 このとき、 (1)1回のクエリで全体を取得し、連想配列などにいれて各列をソートして1番大きな値を探す (2)必要な回数分、適したクエリを投げて、結果を変数に格納し、IDなどで一致させる という二通りのやり方を考えたのですが、どちらが一般的でしょうか。 (1)の場合は、DBに負荷がかからなくていいのかなと思いますが、多彩なフィルタやソートを使わずに、DBを使う意味があるんだろうかと考えてしまいます。 (2)の場合、列数が多いと、たとえば今回は5列分の結果を取得しようと思っていますが、1ページを表示させるのに5回DBへのアクセスがあることになり、運用としてどうなんだろうと考えた次第です。 アクセス数などにもよるのかと思いますが、一般的にこうする、というのがありましたら教えていただければと思います。 もちろん(1)(2)以外の方法でも歓迎です。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • phpによるデータベース操作について(MySQL)

    http://www.yc.tcu.ac.jp/~yamada/doc/mysql/win/0602.html のサイトを参考に以下のような「データベースの内容を表示させる」プログラムを書いたのですが、うまく表示されません。(webブラウザで確認したところまっさらなページで何も表示されません) ちなみに、私はレンタルサーバを借りており、その中で作成したデータベースにphpMyAdminにてテーブルやカラムの作成を行いました。以下のプログラムは「db_sample.php」という名前で保存(エンコード:utf-8)し、レンタルサーバーの公開しているフォルダ「httpdocs」にffftpにてアップロードしています。バージョンは、phpMyAdmin2.11.11.3と、php4.1?(最新の5.2よりひとつ前のもの) ここでは仮に ホスト名:aaa.com (←これは独自に作成したドメイン名でいいのかな?) ユーザー名:user パスワード:pass データベース名:db テーブル名:person とします。 ----------以下プログラム------------ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <title></title> </head> <body> <?php //データベースサーバ名の設定 $db_host = "aaa.com"; //ユーザ名の設定 $db_user = "user"; //パスワードの設定 $db_passwd = "pass"; //データベースサーバへの接続 $db = mysql_connect($db_host,$db_user,$db_passwd); //データベース名の設定 $db_name = "db"; //データベースの選択 mysql_select_db($db_name,$db); //SQL文の設定 $str_sql = "select * from person"; //SQL文の実行 $rs = mysql_query($str_sql,$db); //結果セット内の各レコードを順次参照し、連想配列に代入 while($arr_item = mysql_fetch_assoc($rs)) { //レコード内の各フィールド名と値を順次参照 foreach($arr_item as $key => $value) { //フィールド名と値を表示 print "[{$key}] = {$value}<br>\n"; } print "<br>\n"; } //データベースサーバへの接続の切断 mysql_close($db); ?> </body> </html> ------------------------------------------ わかる方いらっしゃいましたらご教授願います。

  • MySQLのインデックスの使い方を教えてください。

    MySQLのインデックスの使い方を教えてください。 どうやら、検索性を上昇させるためのもののようですが… phpMyAdminで「構造」タブを開くと、【ユニーク】【インデックス】【全文】というアイコンがありますよね。 【ユニーク】を押すと 種別    :BTREE ユニーク  :はい 圧縮    :いいえ フィールド :(チェックを入れた各フィールドの名前) 一意な値の数:(チェックを入れたうち、なぜか最後のフィールドだけはレコード数が表示されるけど、他のフィールドは0になる。どれかひとつをキー的に扱えば充分ということでしょうか。どれでも大して変わらない?) 照合順序  :A 【インデックス】を押すと 種別    :BTREE ユニーク  :いいえ 圧縮    :いいえ フィールド :(チェックを入れた各フィールドの名前) 一意な値の数:0 照合順序  :A 【全文】を押すと 種別    :FULLTEXT ユニーク  :いいえ 圧縮    :いいえ フィールド :(チェックを入れた各フィールドの名前) 一意な値の数:0 となるようですが… (インデックス名は、チェックを入れたフィールドのうち先頭にあるものの名が勝手に採用されますが、後から変更できるみたいですね) 「複数のフィールドにいっぺんにチェックを入れてからアイコンを押す」のと、「ひとつのフィールドずつアイコンを押す」ので結果が違って、なんだか気持ち悪いです。 バラバラのインデックスを作るのと、ひとつのインデックスにまとめるのでは、どう違うのでしょう? 普通はどうするものでしょうか? 例えば no ryaku  cctld  ei   seisiki 1 日本   .jp  japan  日本国 2 アメリカ .us  U.S.A  アメリカ合衆国    3 中国   .cn  China  中華民主主義人民共和国 のように、すべて(あるいはほとんど)のフィールドが一意である場合の例が知りたいです。

    • ベストアンサー
    • MySQL
  • C# ArrayList内の要素の並べ替え。

    C#についての質問です。 現在、ArrayListを用いた情報管理リストのプログラムを作成しています。 そのプログラムにソートを行う機能をつけたいのですが、そこで質問です。 ArrayList内の要素を、「特定のフィールド(例えば氏名であったり、年齢であったりするのですが…)を基準として昇順または降順にソートする」という処理を行う際、IComparable および IComparerを使用する以外の方法で、この機能を実装することは可能でしょうか? 独自に調べてはみたのですが、いまいちわからず、質問させていただきました。 お分かりになられる方がいらっしゃいましたら、ご助言をお願いいたします。

  • date型へのinsertについて

    cプログラムにてoracleのあるテーブルのdate型カラムに値をinsertしたいのですが、 'YYYY/MM/DD hh:mm:ss'の情報を格納するにはどうすればよいのでしょうか? TO_DATEを使用するのでしょうか?

  • DBに0か1を格納する場合

    カラムについてご質問が御座います。 "complete"か"uncomplete"をDBに値を変えて挿入する場合、 カラムはENUMでインデックスを利用して"complete"は1、"uncomplete"は2としてphp側から格納するのがよいのか、カラムをTINYINT(1)やCHAR(1)でDBに0か1で格納すればよいのか、それとも別の方法がよいのか分かりません。 ご指導頂けると幸いです。 mysql Ver 14.14 Distrib 5.1.44 PHP Version 5.3.2

    • ベストアンサー
    • MySQL
  • MySQLから取得した値をPHPを使って配列で渡す方法。

    MySQLから取得した値をPHPを使って配列で渡してグラフ表示させようとしているのですが、MySQLから取得した値をPHPを使って配列で渡す方法が全く分かりません。 プログラム初心者で、サンプルプログラムを組み合わせて、とりあえず下記のようなプログラムを書いてみたのですうまくいきません。 めちゃくちゃなプログラムでどこから手をつけていいかも分からないかもしれませんが、今週中に何とかしなくてはなりません。皆さんのお力をお借しください、お願いします。 データベースに接続し値を取得↓ <?php // データベースへの接続情報を設定します。 $db_user = "root"; $db_pass = "590312"; $db_host = "localhost"; $db_name = "zikokanrinote"; $id = $_REQUEST['id']; $day_s = $_REQUEST['day_s']; $day_e = $_REQUEST['day_e']; $study = $_REQUEST['study']; // MySQLとの接続を行います。 $db = mysql_connect($db_host, $db_user, $db_pass) or die("Cannot connect to database"); // クライアントのキャラクタセットをUTF-8に変更します。 mysql_query("SET NAMES utf8"); // データベースを選択します。 mysql_select_db($db_name) or die("Cannot select database"); if(!get_magic_quotes_gpc()){ $id = mysql_real_escape_string($id); $day_s = mysql_real_escape_string($day_s); $day_e = mysql_real_escape_string($day_e); $study = mysql_real_escape_string($study); } $sql = "select result FROM result where ((id='$id') and (date between '$day_s' and '$day_e') and (study_code='hakike'))"; // SQL文を実行します。 $result = mysql_query($sql) or die("Query failed"); // フィールドの数をカウントします。 $fcnt = mysql_num_fields($result); // カラム名の取り出しを行います。 // データの取り出しを行います。 // mysql_fetch_arrayは結果セットの行データを // 配列もしくはカラム名をキーにした連想配列で返します。 while($rows = mysql_fetch_array($result)) ?> グラフを表示させる↓ <? // Here's where we call the chart, and return the encoded chart data $test_data=array($rows); echo "<img src=http://chart.apis.google.com/chart?chtt=".urlencode("吐き気")."&cht=lc&chs=450x125&chd=".chart_data($test_data).">"; // Here's an array containing some data to plot // And here's the function function chart_data($values) { // Port of JavaScript from http://code.google.com/apis/chart/ // http://james.cridland.net/code // First, find the maximum value from the values given $maxValue = max($values); // A list of encoding characters to help later, as per Google's example $simpleEncoding = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; $chartData = "s:"; for ($i = 0; $i < count($values); $i++) { $currentValue = $values[$i]; if ($currentValue > -1) { $chartData.=substr($simpleEncoding,61*($currentValue/$maxValue),1); } else { $chartData.='_'; } } // Return the chart data - and let the Y axis to show the maximum value return $chartData."&chxt=y&chxl=0:|0|".$maxValue; } ?>

    • 締切済み
    • PHP