質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

Q&A

解決済

3回答

5402閲覧

MySQLのテーブルに追加した情報を五十音順に並び替えたい

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

XAMPP

XAMPP(ザンプ)は、ウェブアプリケーションの実行に必要なフリーソフトウェアをパッケージングしたApacheディストリビューションです。 XAMPPひとつインストールするだけで、Apache、MySQL、PHP、Perlなどのソフトウェアと、 phpMyAdminなどの管理ツール、SQLiteなどのソフトウェアやライブラリモジュールなどを利用することが可能です。

0グッド

1クリップ

投稿2015/09/04 04:58

学校の課題で店舗検索システムを作っています。
XAMPPをインストールして、MySQLに店舗情報を追加しているところなのですが、追加したレコードを店舗名の50音順に並べ、上から順に自動連番を付けることは可能でしょうか?

MySQLに SHOP というデータベース、その下に SHOPLIST というテーブルを用意しました。
SHOPLISTテーブル には SHOP_NAME(店舗の正式名称)と SHOP_KANA(店舗名の読み仮名)というカラムがあります。
この SHOP_KANA に追加したカタカナの店舗名に沿って、SHOPLISTテーブル内の店舗情報を全て五十音順に並び替えたいです。
(今は登録した順に並んでいます)

また、五十音順に並び替えた後、上から順に自動連番を付け、それを主キーにしたいです。

初心者のため、なにか間違った認識や文章等があるかもしれませんが、分かる方がいらっしゃいましたら、教えていただきたいです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

レコードが追加されるたびに、
1.いったんすべて抽出
2.レコードを全部delete
3.抽出レコードをSHOP_KANAでソート
4.連番をふる
5.ソートしたレコードをinsert
で、恐らく可能と思われますが、
やるべきではないです。

使用する際に、order byで対処するものです。

投稿2015/09/04 13:23

TetsujiMiwa

総合スコア1124

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/09/06 10:20

ご回答ありがとうございます。 目前の作業の進めやすさしか考えておらず、並び替えをしたいと思っていたのですが、他の回答も踏まえ、確かにやるべきではないと感じました…。
guest

0

ベストアンサー

上から順に自動連番を付け、それを主キーに

テーブルのデータに「連番」を振ろうとする行為は、次のように運用に問題を残す事が多いです。
○運用中に以下の事があると都度連番を作成しなおす?
・・店舗の追加や削除
・・かなの入力ミスがあったため修正
・・店舗名が変わった
○(振りなおすと)関連テーブル(責任者連絡先等)があると、それらとの整合を取るのが大変
○自明な事(並び順はSHOP_KANAによって決まっている)を別要素でも管理すると、互いに整合を取らなければいけない

主キーをIDのように使うならデータはユニークであれば良く、それ以外の意味を持たせないようにしたほうが無難です。
番号がほしいなら、select時にデータに追加するか、
HTMLを作成時にどうせPHPのループを使うので、その際にPHPで連番を作成するのが良いかも知れません。

そのような事は承知の上で、それでも連番にしてテーブルに保存しないといけないのなら
ベタに次のような方法ででも可能です。
1.既存のテーブルをリネーム old_SHOPLIST
2.pkeyを追加した新しいテーブルを古いテーブルの名前で作成 SHOPLIST
3.SHOPLISTにold_SHOPLISTから抽出してソートしたデータを入れる。参考
.....連番の作成はpkeyをAUTO_INCREMENTにしておくか、Kosuke_shibuyaさんの書かれている方法等
4.データを確認
5.リネームしたテーブルを削除

投稿2015/09/04 11:08

編集2015/09/04 11:23
hirohiro

総合スコア2068

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/09/06 10:14

ご回答ありがとうございます。 今はMySQLやHTML等の扱いになれることを優先して、店舗情報は数件しか登録していないのですが、今後店舗数は増やしていく予定です。 たしかに、店舗数が増える度に番号を振り直したりということは面倒だなと気づきました。 今回は並び替えることなく、このまま制作を進めることにしました。 また、必要に応じてPHPで連番を付けたいと思います。 データを並び替えることに関しての問題点を教えてくださった上で、並び替えの方法を教えてくださったhirohiro様のご回答をベストアンサーにさせていただきます。
hirohiro

2015/09/06 13:45 編集

何か少し引っかかったので、補足しておきますとselectでデータを抽出するさいに毎回ソートすることは一般的にも普通に行われます。 SELECT * FROM SHOPLIST ORDER BY SHOP_KANA (抽出の度に)毎回ソートすることは無駄に見えるかも知れませんがこれはもうそういうものです。 しかし、この並び替えたデータでDBを上書きするということは普通は行いません。 それに記憶が正しければ、順番に登録したはずでも、ソートせずに抽出した場合SQLは仕様上、登録した順番のままリストを作成することを保障していません。(そうは言っても順番通りでますけど) なので結局振った番号でソートすることが必要になります。 それでPHPで連番を振ればいいというのは 上記のように抽出したものをPHPでHTMLに書き出す際、1行ずつループで処理するはずなので、その時についでに番号も書き出せばいいのでは?といった意味です。 もちろんKosuke_shibuyaさんの方法でselect時に番号を作成してしまうのもありです。
guest

0

一応、これで順番は取れます。ただ、同名のものがあった時とかのことは考慮されていないようですので、その辺を考慮の上、あとはサブクエリでも使ってUPDATEしてください。

sql

1SET @id = 0; 2SELECT 3 @id:=@id+1 AS `num` 4 , SHOP_KANA 5FROM SHOPLIST 6ORDER BY SHOP_KANA;

投稿2015/09/04 05:39

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2015/09/06 09:51

ご回答ありがとうございます。 教えていただいた通りにやってみたところ、レコードを50音順にすることができました。 ただ、その都度SQLに教えていただいたものを入力することなく、一度並び替えをした後は SELECT * FROM `shoplist` WHERE 1 を入力すると50音順に並んでいる、といった感じに変更することは難しいでしょうか…? (説明が分かりづらくてすみません。)
退会済みユーザー

退会済みユーザー

2015/09/06 13:16

それは無理です。なので、他の方が入っているように、この質問自体が無意味なことなのです。基本ORDER句を利用しないクエリで取り出しの順番を保証する手段はありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問