• ベストアンサー

MySQLで特定のヒラガナ以降のレコードを選択した

Gaffgarionの回答

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

ぱっと思いつくのは where hurigana like "あ%" でも、性能を気にするならばあまりこれはよくないでしょう。 > 単純に「あ」、「か」、「さ」・・・と選択して蓄積しても良いのですが > これは、頭文字用のカラムを作るということでしょうか。 でしたら、それが良いと思いますよ。 プログラムでの登録時の処理や該当テーブルの構成を変えたくないのであれば、 頭文字用のテーブルを作るのはどうでしょう。 triggerと文字列関数のleftを使えば、フリガナから頭1文字をとって頭文字テーブルに データ登録することはmysqlだけでできます。 (マルチバイトのためleftよりsubstringの方が良いかもしれません)

gtx456gtx
質問者

お礼

インデックスとして「あ」、「か」、「さ」・・・を考えています。 >triggerと文字列関数のleftを使えば、フリガナから頭1文字をとって >頭文字テーブルにデータ登録することはmysqlだけでできます。 トリガーですか! トリガーを殆ど使ったことがないので、SELECTだけで解決しようと思っていましたが、確かに登録と同時に「頭文字用のテーブル」は良いですね。 これを機会にトリガーも使えるように頑張ってみます。 ありがとうございました。

関連するQ&A

  • MySQLのレコードを逆向きに並べる方法は?

    MySQLのレコードを逆向きに並べる方法は? MySQLを使って、掲示板を作ろうとしているのですが、 “db1”というデータベースに、“tbk”というテーブルを作り、 “bangou”というフィールドで、AUTO_INCREMENTで番号をふり、 下記のように、番号順にレコードをプリントしているのですが、 <?php $s=mysql_connect("localhost","root","パスワード"); mysql_select_db("db1"); $re=mysql_query("select * from tbk order by bangou"); while($kekka=mysql_fetch_array($re)){ print "<hr />"; print $kekka[0]; print "<br />"; print $kekka[1]; print "<br />"; print $kekka[2]; print "<br />"; print $kekka[3]; print "<br />"; } mysql_close($s); ?> このように、番号の若い順にレコードをプリントするのではなく、 番号(“bangou”)の古い順にレコードをプリントするようにするには、 どうすれば良いでしょうか?

  • MySQL+PHP 特定レコードの更新と作成

    MySQL+PHPの初心者です。 特定レコードの変更または新規作成のサンプルなどあればお教えいただけるでしょうか。 例えば特定商品の単価のレコードがあれば新しい単価に変更と そのレコードが無ければ新規にレコードを作成するようなケースになります。 VBAなどでは検索のSQL文からレコードセットを作成し レコードが無い場合は レコードセット名.addnewで必要なフィールドに 値をセットし レコードセット名.update 該当するレコードがあった場合は レコードセット名.edit で必要なフィールドに 値をセットし レコードセット名.updateなど簡単な処理なのですが MySQL+PHP の場合データの検索と新規レコードの単純な記述は ある程度はわかるのですが上記のようなケースは実際どのように 書かれているのかお教え願えると幸いです。 商品単価テーブルには商品コードと単価のフィールドになります。 よろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • テーブルの最後(最新)のレコードを抽出したい

    宜しくお願いします。 PHP MYSQL の組み合わせで使っています 以下のようにして、最後のレコードを取り出したいのですが まったく違う事をしているのかもしれません。 $sql =" select * from テーブル where フィールド='max' " ; フィールドはauto_incrementで番号を振っています。 これで最大のつもりなのですが・・・。 他にも、レコードを入れた時間も記録したフィールドがあるのですが どうしてよいか?判りません。 テーブルの最新のレコードを出したいのです。 **その中の一つのフィールドを取り出すのですが、   それはうまくいっているみたいです    (max の所に数字を入れると表示します) お手数かけますが、どなたかご教授お願いいたします。

    • ベストアンサー
    • MySQL
  • 条件によってレコードを取得したい

    Mysqlで以下のような条件のSQL文がわかりません。 hogeというフィールドの値に1があればそのレコードを取得 hogeに1という値のフィールド値をもったレコードがないならhogeが空のレコードを取得したいのですが方法がわかりません。 SELECT * FROM `tebleA` where (`hoge` = '1') or `postageFee_memId` = '' LIMIT 5 上のSQL文ではどうしても「`postageFee_memId` = '' 」のほうが優先されます。 (優先されるのはオートインクリメントIDが小さいから当然ですが・・) 「`hoge` = '1'」が絶対優先されるようにしたいのです。 いわゆる 「`hoge` = '1'」がない場合だけ「`postageFee_memId` = ''」が実行できればと思います。 ifとかを使って条件文をかけばいいのでしょうか? 足らずの情報があればおっしゃってください。 何卒ご教授お願いいたします。

  • レコードの取得について

    Postgres + PHPの事で質問させて頂きます。 SELECT文で特定のレコードを選択し、 その値を別のテーブルに、それぞれのフィールドに 個別に格納したいのですが、上手くいきません。 現状では、レコードの選択はできて、 別のテーブル(zテーブルと仮定)にも格納はできるのですが、 例えば、選択したレコードがaa/bb/ccと、3件あった場合でも 最初のaaしか格納されないのです。 これを3件ともzテーブルに個別に格納したいと思っております。 while($row = pg_fetch_array($result)) 文を使って、連想配列で読み出しているのですが 何かが足りないのでしょうか?ご教授お願い致します。

    • ベストアンサー
    • PHP
  • MySQL側で計算してもらってレコードを更新できるか??

    質問があるのですがよろしくお願いします。 例えば、「point」というカラムのレコードの数値を+1して更新したい時に、 update文の中に「id~番のレコードの、「point」のカラムの数値を+1する」みたいな命令を書いて、 MySQL側で計算してもらってレコードを更新することは出来るのでしょうか? それとも、やはり一度select文で数値を取り出して、 perlやPHP等のミドルウェア側で数値を+1してからupdate文で更新するしかないのでしょうか? どなたか分かる方いらっしゃいましたらよろしくお願いします。

    • ベストアンサー
    • MySQL
  • ファイルメーカーPRO5で、表示させたいレコードと表示させたくないレコードを作るには?

    100件のレコードの内、50件の男性に該当するものだけを表示させ印刷するレイアウトを作りたいのですが、どうすればよいでしょうか?レコードには男性、女性、その他があります。フィールドは、住所、氏名、電話番号です。

  • mysql_num_rowを繰り返したい

    ラジオボタン選択肢アンケートのデータをMySQLのテーブルに入れて、 mysql_num_row()で各選択肢の件数を抽出したいのですが。 選択肢は1~5の数値(int型)でanテーブルに入っています。 for ($i = 1; $ <= 5; $++) { $rst = mysql_query("SELECT * FROM an WHERE field=$i", $con); $kotae.$i = mysql_num_row($rst); } このように書くと 1の選択肢の数しか返してきません。しかも、件数が間違って返ってくる。  文法が間違っているからだと思うのですが。上記のようなことをやりたいのです。  forを使わないでやると、 $rst = mysql_query("SELECT * FROM an WHERE field=1",$con); $kotae1 = mysql_num_rows($rst); $rst = mysql_query("SELECT * FROM an WHERE field=2",$con); $kotae2 = mysql_num_rows($rst); $rst = mysql_query("SELECT * FROM an WHERE field=3",$con); $kotae3 = mysql_num_rows($rst); $rst = mysql_query("SELECT * FROM an WHERE field=4",$con); $kotae4 = mysql_num_rows($rst); $rst = mysql_query("SELECT * FROM an WHERE field=5",$con); $kotae5 = mysql_num_rows($rst); です。  forを使って楽にやりたい場合はどうすればよいでしょうか 宜しくお願いいたします。

    • ベストアンサー
    • PHP
  • XAMPPのMySQLで削除済みレコードが表示される

    XAMPPのMySQLで削除済みレコードが表示される XAMPP1.7.3をWinXP Proにて運用しています。 PHPにてselectのSQLを実行したところ、削除済みのレコードが表示されるため困っています。 これまでの経緯は 1.phpMyAdminにてDBとテーブルを作成し、サンプルデータを4件登録 2.PHPからselectで条件なしで全レコードが表示されるのを確認 3.条件をつけてselectし、それぞれの条件にマッチしたレコードが表示されるのを確認 4.phpMyAdminにて1レコードを削除 5.条件をつけてselectし、削除したレコードが表示されるのを発見 6.phpMyAdminのSQLで同じ条件のSQLを実行し、削除レコードが表示されないのを確認 7.PHP側のselect後にDBCloseをしているかの確認 8.phpMyAdminにてテーブルの修復、最適化などを実行 9.MySQLの再起動 以上の操作をしてみましたが、やはりPHPからのSQLの結果に削除されたレコードが表示されてしまいます。 色々なサイトで同じような現象のTipsがないか探しましたが、見つけきれず質問させていただきます。 同じような現象に対しての対応を紹介したサイトや、対処方法をご教授下さい。 よろしくお願いします。

  • レコードが選択されないときの、置換ができません

    select max(COL_1) from TBL where COL2 = 'hoge'; というようなSQLがあり、この条件での選択されるレコードが存在しないとき max(COL_1)の値を"0"(ゼロ)にしたいのですが。。。 select nvl(max(COL_1),NULL,0) from TBL where COL2 = 'hoge'; と修正しても結果は変わらず「レコードが選択されませんでした。」 となってしまいます。 他にdecodeや、countも試したのですが、力量不足のため、上手くいきません。。 どなたかご教授願います。 Oracle 9i で SQL*Plus 使用しています。