- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MySQLでフィールドの並び替え)
MySQLでフィールドの並び替え
このQ&Aのポイント
- PHP+MySQLで投票システムの構築をして、データベースのフィールドを投票数の多い順に並べ替えたい場合、どのようなクエリを使用すれば良いか分かりません。
- データベースにINSERTされたデータをSELECTする際に、投票数の多い順に並び替えをしたいと思っていますが、フィールド名が異なるため、今回の仕様でのソートの方法が分かりません。
- PHP5.3.3とMySQL5.0.77を使用しています。投票システムを構築し、投票数の多い順にフィールドを並び替える方法を教えていただけないでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
どういうテーブル設計をなさっているのかに拠るかと思います。 「id、種別、投票回数」のようなテーブルになっていれば、 単純にORDER BYで投票回数をソートすればいい気がします。 仰っている内容から察するに、「id、item1、item2、item3」というテーブルになっていて、 それぞれ「item*」に投票回数が加算されていくということでしょうか? だとすれば、テーブル設計をまず考え直すことをお勧めします。 「id、種別、投票回数」のテーブルを作り、 各種別のid、種別を入力したデータを作成されてみては如何でしょうか。
その他の回答 (1)
- yambejp
- ベストアンサー率51% (3827/7415)
回答No.2
クリックしたらインクリメントされるという単純な仕組みだと 同じ人が何度もクリックしますよ? たとえばテーブル構成を question_id,user_id,item_idとして question_id,user_idに複合でunique属性をつけておけば ある質問に対して特定のユーザーは1アイテムしか選択できなくなります 最終的にquestion_idごとにitem_idでgroup by してcountすれば 投票回数の整合性がとれると思います
質問者
お礼
ご回答をいただき、ありがとうございます。 >クリックしたらインクリメントされるという単純な仕組みだと >同じ人が何度もクリックしますよ? 「 投票をする 」ボタンをクリックして、submitする時にIPアドレスの制限を 噛まして重複投稿を避けています。 ( ルータの再起動等でIPアドレスを変更されれば無理ですが・・・ ) >最終的にquestion_idごとにitem_idでgroup by してcountすれば >投票回数の整合性がとれる なるほど、貴重な情報をいただき感謝申し上げます。
お礼
ご回答をいただき、ありがとうございます。 >「id、item1、item2、item3」というテーブルになっていて、 >それぞれ「item*」に投票回数が加算されていくということでしょうか? はい、その通りです。 >「id、種別、投票回数」のようなテーブルになっていれば、 >単純にORDER BYで投票回数をソートすればいい 確かに仰る通りですね。 テーブルの構造に問題がありますね。 構築していて何か変だなと思っていましたが、冷静に考えると当然ですよね。 ありがとうございます。助かりました。