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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

5回答

5142閲覧

順番付きリストの並び替えについて

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

1グッド

1クリップ

投稿2016/06/13 03:12

工場の工程表というリストをPHPを利用して作成しております。
表の名称が示す通り、工程を処理していく順番が登録されており、
順番を昇順にリスト化しています。

  1. 手を洗う
  2. 野菜を切る
  3. お湯をわかす
  4. 出汁を入れる

データベースのテーブルには、「No、項目、更新日時」といったフィールドを
作成し格納しています。

リストの途中に、工程を追加した場合、追加した工程以降の番号を振り直し、
データベースの更新を行っております。
件数が増えてくると、データの更新対象も増え、非常に効率的に感じております。

人間の世界であれば、「上から順番に」といった概念が通用するのかもしれませんが、
データベースでも、こういった概念をもったテーブル構造もしくは、格納方法などはございませんでしょうか?

http://blog.linknode.net/article/1393344540

こちらも参考にしていみましたが、Noが被った時に必ず更新日時が最新のものが優先になってしまいますので、利用できませんでした。

退会済みユーザー👍を押しています

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

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

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

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

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

guest

回答5

0

ベストアンサー

フィールドを追加してよいのであれば以下のような方法が考えられます。

  1. priorityというカラムを用意する(これを表示時のORDER BYに使う)
  2. 既存データに1000単位でデータを入れていく(1レコード目:1000,2レコード目:2000...)
  3. 間に追加が発生した場合、前後のレコードの半分のpriorityにしてデータを入れる
  4. 間が詰まり過ぎて前後のpriorityの差が1になってしまった時、全レコードを2の手順と同じ方法で1000単位で振り分けなおす(1日おきに定期的に振りなおしてもよいと思います)

※もちろんこの作業はUPDATE文を使って全レコードに1クエリで実行します

投稿2016/06/13 03:17

masaya_ohashi

総合スコア9206

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

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

0

1000 手を洗う 2000 野菜を切る 3000 出汁を入れる

のような感じで登録しておいて、工程の追加が発生した場合は

1000 手を洗う 2000 野菜を切る 2500 お湯をわかす 3000 出汁を入れる

と前後の中間の値を設定してあげればいいかと思います。

最終的な1,2,3,4の番号はhtmlのolを使ってもいいですし、phpでforeachで回すなら

php

1$num = 0; 2foreach($hoge as $val){ 3 $num++; 4 echo $num. '. '. $val; 5}

のようにナンバリング用の変数作ってしまうとかでしょうか。

投稿2016/06/13 03:22

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

皆様、回答ありがとうございました。

ご指摘頂きました「プライオリティ」を付けて、プライオリティの値に幅をもたせて
対応することにいたしました。

昔からこういったことがあるように思えるので、RDB側でなんか良い機能があればいいんですが。。。

投稿2016/06/13 20:43

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

考え方はほかの方と同じですが、ソート用のカラムをdoubleでもてば
3と4の間にデータを挿入するときに3.1とかで投入すればよいです。
プロシージャなどうまく使うと投入すべき番号なども半自動でとれるでしょう

投稿2016/06/13 04:43

yambejp

総合スコア114883

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

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

0

他の回答と同じように、大きめの番号で順番付するのが良いですね(昔のBASICのようですが)

他の案としては、プログラムっぽくなりますが、次のような構造のテーブルにするとか。
no
項目
next

データ例
no,項目,next
1,手を洗う,2
2,野菜を切る,3
3,お湯をわかす,4
4,出汁を入れる,NULL

データの抽出が面倒ですが…。

投稿2016/06/13 03:59

ttyp03

総合スコア16998

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問