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

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

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

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

PHP

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

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

Q&A

2回答

846閲覧

PHPでの配列のソート

wolf2

総合スコア19

MySQL

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

PHP

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

ソート

複数のデータを、順序性に従って並べ替えること。 データ処理を行う際に頻繁に用いられ、多くのアルゴリズムが存在します。速度、容量、複雑さなどに違いがあり、高速性に特化したものにクイックソートがあります。

0グッド

1クリップ

投稿2018/12/23 06:40

編集2018/12/23 09:03

こんにちは。

現在PHPにてMYSQLに格納されている以下の様なデータを
取得し、先頭の数値で配列の昇順ソートしようとしているのですが上手くいきません。

クエリ結果(SELECT DISTINCT size_name FROM m_item ORDER BY size_name DESC)のデータ
5x15
5x16
6.5x15
6.5x16
6x14
6x15
6x16
7.5x16
7.5x17
7.5x18
7x15
7x16
7x17
7x18
8.5x18
8.5x19
8.5x20
8.5x21
8x17
8x18
8x19
8x20
9.5x18
9.5x19
9.5x20

Object:object(PDOStatement)#41 (1) { ["queryString"]=> string(61) "SELECT DISTINCT size_name FROM m_item ORDER BY size_name DESC" }

ソース一部抜粋

PHP

1 //PDOにてQueryを発行するメソッド 2 public function SizeSelect() { 3 $sql = ""; 4 try { 5 $sql = "SELECT DISTINCT size_name FROM m_item ORDER BY size_name DESC"; 6 $pdo = new PDO(DB_HOST,DB_USER,DB_PASSWORD); 7 8 $sth = $pdo->prepare($sql); 9 $sth->execute(); 10 $pdo = null; 11 12 return $sth; 13 14 } catch (PDOException $e) { 15 print_r($e->getMessage()); 16 } 17 } 18コード

PHP

1 2 //上記のメソッドを呼び出しforeachで取得したObjectを回しデータを表示するロジック 3 public function SizeShow() { 4 include_once("./module/db.php"); 5 $db = new Db(); 6 $Size = $db->SizeSelect(); 7 8 // var_dump($Size); 9 10 foreach($Size as $row) { 11 if($row[0] != "") { 12 echo("<option value='".$row[0]."'>".$row[0]."</option>"); 13 } 14 } 15 } 16コード

やはり一度分解して
先頭の数値を抜き出して、ソートするのが無難でしょうか?
皆様のお知恵をお貸し下さい。

宜しくお願い致します。

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

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

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

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

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

m.ts10806

2018/12/23 07:39

現象が再現するコード、データのサンプルをご提示ください。 また、取得後に並べかえるのではなくselectで並べかえたものを取得した方が良いような?
wolf2

2018/12/23 08:26

失礼致しました。 現状mts10806様の仰られている通りOrderByを使っているのですが DESC ASCどちらを試してもうまく行かなかったので 配列ソートを試そうと思っておりますが、単純にソート関数を使用しても OrderByと結果が変わらない気がしまして皆様でしたらどのような対応をされるのか 参考にさせて頂きたく投稿致しました。 ですので、コードに対しての修正というよりはこういう方法がある、私はいつもこうしているというようなレベルでご回答頂ければ幸いでございます。
m.ts10806

2018/12/23 08:32

質問は編集できるので適宜ご対応いただければと。 phpでないと出来ない加工でない限りはsqlでやりきります。 どのようなデータが入っていてどのようにしたいかを図(マークダウンでテーブル組めます)で示していただければ。 テーブルのcreate文とデータのinsert文があれば再現確認もしやすいです。 うまくいかないにも理由があります。もしかしたら惜しいところまで出来ているかもしれませんがそれはコードを見ないと判断できません。 「order byと配列のソートどちらも変わらない気がする」と仰っている時点で考え方のみでは解決に至れないと私は感じました。
wolf2

2018/12/23 09:00

なるほど、質問の方は意図が正しく伝わるように編集させて頂きます。 又、ご指摘頂き有難う御座います。 コードは修正した内容をご確認頂ければと思いますが、基本的には PDOのクエリ発行の辞典でSQLにORDER BYを記述しているという形で それ以外は特に変わった事はしていないと思いますが・・・ ともあれ、詳細なご回答有難う御座います。
退会済みユーザー

退会済みユーザー

2018/12/23 09:12

なんとなくわかったけど、DBの構成が間違えてそうだよなぁ(width 項目、 height 項目 等)
wolf2

2018/12/23 09:15

asahina1979様 ご回答有難う御座います。 DBについては、クライアントの移行でめちゃくちゃな形式での 構築を余儀なくされている部分があります。 確かにその部分の影響はあるかもしれません。
guest

回答2

0

値を分けてmysqlに格納するのが最善だと思いますが、
それが無理であればusort関数を使ってソートするのがいいかと思います。

例えばこんな感じ

php

1function cmp($a,$b){ 2 $x = explode("x",$a); 3 $y = explode("x",$b); 4 $z = floatval($x[0]) - floatval($y[0]); 5 if($z!=0){ 6 return $z; 7 }else{ 8 $z = floatval($x[1]) - floatval($y[1]); 9 if($z!=0){ 10 return $z; 11 } 12 return 0; 13 } 14} 15 16 17usort($a, "cmp");

投稿2018/12/24 20:14

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ソートをする前提のデータの持ち方をさせるか
最初から2データをわけるかのどちらかが妥当でしょう

  • ソート前提のデータ
size_name 05.0x15 05.0x16 06.5x15 06.5x16 06.0x14 06.0x15 06.0x16 07.5x16 07.5x17 07.5x18 07.0x15 07.0x16 07.0x17 07.0x18 08.5x18 08.5x19 08.5x20 08.5x21 08.0x17 08.0x18 08.0x19 08.0x20 09.5x18 09.5x19 09.5x20
  • データを分ける
size1size2
515
516
6.515
6.516
614
615
616
7.516
7.517
7.518
715
716
717
718
8.518
8.519
8.520
8.521
817
818
819
820
9.518
9.519
9.520

投稿2018/12/25 02:05

yambejp

総合スコア114769

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

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

wolf2

2018/12/26 15:37

ご回答有難う御座います。 すみません、今回はクライアント希望で DBの構造は変更出来ないのです…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問