EC サイトを構築しており、
店舗管理者が商品の並びを自由に替えるようにしたいです。
例えば、以下のようなテーブルが DB 内にあるとします。
+---+-------+
|ID | name |
+---+-------+
| 1 | 商品1 |
| 2 | 商品2 |
| 3 | 商品3 |
| 4 | 商品4 |
| 5 | 商品5 |
+---+-------+
ユーザーが
商品1 - 商品4 - 商品2 - 商品3 - 商品5
という順で並べ替えを行う機能を実装するには
以下の 2 つの方法が考えられます。
【方法1】
rank というカラムを追加して
+---+-------+------+ +---+-------+------+
|ID | name | rank | |ID | name | rank |
+---+-------+------+ +---+-------+------+
| 1 | 商品1 | 1 | | 1 | 商品1 | 1 |
| 2 | 商品2 | 2 | => | 2 | 商品2 | 3 |
| 3 | 商品3 | 3 | | 3 | 商品3 | 4 |
| 4 | 商品4 | 4 | | 4 | 商品4 | 2 |
| 5 | 商品5 | 5 | | 5 | 商品5 | 5 |
+---+-------+------+ +---+-------+------+
と rank を更新し、rank の昇順で表示させる
【方法2】
next_id というカラムを追加して
+---+-------+---------+ +---+-------+---------+
|ID | name | next_Id | |ID | name | next_id |
+---+-------+---------+ +---+-------+---------+
| 1 | 商品1 | 2 | | 1 | 商品1 | 4 |
| 2 | 商品2 | 3 | => | 2 | 商品2 | 3 |
| 3 | 商品3 | 4 | | 3 | 商品3 | 5 |
| 4 | 商品4 | 5 | | 4 | 商品4 | 2 |
| 5 | 商品5 | | | 5 | 商品5 | |
+---+-------+---------+ +---+-------+---------+
と next_id を更新し、
ID と next_id を交互に見ながら画面に並べる
【方法2】では、どんなにデータ数が多くなっても
3 レコードだけ更新すれば済みますが
【方法1】だと、データ数が多くなれば
かなりの数のレコードを更新する必要があります。
ところが、
【方法1】だと SQL の order by rank でソートできるのに対し、
【方法2】だと全データを取得してからプログラムで並べ替えを行わなくてはならない
と思います。
そこで、【方法2】を使い、かつ SQL で簡単に取得できる方法はないか探しています。
【方法2】で、素直にプログラムで並べ替えればいいという意見もあるかと思いますが
ページ送りのある一覧画面で並べ替えもさせたいと思っており、
DB 側でで並べ替えられたデータを limit で 1 画面に表示する件数分だけ取得する
ということを行いたいのです。
もし、うまい方法があれば宜しくお願い致します。
DB は MySQL を使っていますが、他の DB にすることも可能で、
バージョンも問いません。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
方法2はどう考えても、NGだと思うのですが。
。。素直に方法1を取るべきです。■理由
・SQL の order by だけで利用できる列と、プログラムを介在させないと利用できない列があった場合、前者の方が「データ」としての価値が高い(活用度が高い)。言い換えるとデータベースに格納しているデータなのに扱いが煩雑であることはマイナス。
・一度に並び替える個数が多くなった場合、方法2でも修正するデータ量が増えていく。つまり方法2としてのメリットが薄れる。
回答ありがとうございます。
もしかしたらエレガントなロジックが存在するのかなと思ったりもしたのですが、やっぱり素直に必要な数だけ更新する方がよさそうですね。
更新よりも参照の方が圧倒的にトラフィックは多いわけですし。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【ExcelVBA】Powerクエリーでいうピボット解除と同じ処理をVBAで 4 2022/07/06 17:09
- HTML・CSS FC2カートのテンプレートでの商品表示について 1 2023/03/02 18:05
- SQL Server SQLのクエリの書き方 1 2022/03/29 23:06
- Excel(エクセル) エクセルデーターの並び替え 5 2022/08/06 09:59
- その他(Microsoft Office) Excelで該当しない項目(#N/Aの商品名)を簡単に表示・抽出させる方法についてです 1 2022/08/25 22:12
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- Excel(エクセル) エクセルでのVBA 2 2022/08/03 06:48
- Excel(エクセル) 【条件付き書式】countifsで複数条件を満たしたセルを赤くする方法 2 2023/02/09 23:53
- 経営情報システム accessでの請求管理について 12 2022/06/11 16:20
- Excel(エクセル) 棚卸表の前月比の関数等あれば教えてください 2 2023/05/02 18:34
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
商品の数え方
-
自分の商品をお店に置いてもら...
-
データの更新方法について
-
グロッサリーの格好
-
松屋のサラダをテイクアウト
-
ディベートをするのですが、根...
-
会社経営は,どっちに転んでも大...
-
誤って発送した商品が返送され...
-
初めまして。 言葉足らずではあ...
-
男性向け商品について
-
セールスや営業でよく商品を売...
-
INDIVIの製品タグの見方
-
自分でプリザーブドフラワーを...
-
レンタル業の商品は固定資産で...
-
論理回路
-
ハイテクとローテクのつながり...
-
インターネットの普及で、文具...
-
外国人観光客についてなのです...
-
「商品名」と「製品名」の違い
-
同じ商品なのにサイトによって...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
商品の数え方
-
自分の商品をお店に置いてもら...
-
外国人観光客についてなのです...
-
ラブホのコンドームはなぜ2個な...
-
手作業の効率化
-
「現品限り」を説明する場合
-
インターネットの普及で、文具...
-
データの更新方法について
-
エクセルの使い方について
-
レンタル業の商品は固定資産で...
-
弥生販売を使いやすくする裏ワ...
-
リニューアルした商品って、リ...
-
マクドナルドのアルバイトのも...
-
INDIVIの製品タグの見方
-
商業簿記は商品売買業を対象に...
-
セールスや営業でよく商品を売...
-
k.k.インテックとしか書いてい...
-
コカコーラの補充の物ですが 商...
-
グロッサリーの格好
-
マクドナルドの朝マックはなぜ...
おすすめ情報