• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MySQLでフィールドの並び替え)

MySQLでフィールドの並び替え

このQ&Aのポイント
  • PHP+MySQLで投票システムの構築をして、データベースのフィールドを投票数の多い順に並べ替えたい場合、どのようなクエリを使用すれば良いか分かりません。
  • データベースにINSERTされたデータをSELECTする際に、投票数の多い順に並び替えをしたいと思っていますが、フィールド名が異なるため、今回の仕様でのソートの方法が分かりません。
  • PHP5.3.3とMySQL5.0.77を使用しています。投票システムを構築し、投票数の多い順にフィールドを並び替える方法を教えていただけないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • utun01
  • ベストアンサー率40% (110/270)
回答No.1

どういうテーブル設計をなさっているのかに拠るかと思います。 「id、種別、投票回数」のようなテーブルになっていれば、 単純にORDER BYで投票回数をソートすればいい気がします。 仰っている内容から察するに、「id、item1、item2、item3」というテーブルになっていて、 それぞれ「item*」に投票回数が加算されていくということでしょうか? だとすれば、テーブル設計をまず考え直すことをお勧めします。 「id、種別、投票回数」のテーブルを作り、 各種別のid、種別を入力したデータを作成されてみては如何でしょうか。

nazal2010
質問者

お礼

ご回答をいただき、ありがとうございます。 >「id、item1、item2、item3」というテーブルになっていて、 >それぞれ「item*」に投票回数が加算されていくということでしょうか? はい、その通りです。 >「id、種別、投票回数」のようなテーブルになっていれば、 >単純にORDER BYで投票回数をソートすればいい 確かに仰る通りですね。 テーブルの構造に問題がありますね。 構築していて何か変だなと思っていましたが、冷静に考えると当然ですよね。 ありがとうございます。助かりました。

その他の回答 (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すれば 投票回数の整合性がとれると思います

nazal2010
質問者

お礼

ご回答をいただき、ありがとうございます。 >クリックしたらインクリメントされるという単純な仕組みだと >同じ人が何度もクリックしますよ? 「 投票をする 」ボタンをクリックして、submitする時にIPアドレスの制限を 噛まして重複投稿を避けています。 ( ルータの再起動等でIPアドレスを変更されれば無理ですが・・・ ) >最終的にquestion_idごとにitem_idでgroup by してcountすれば >投票回数の整合性がとれる なるほど、貴重な情報をいただき感謝申し上げます。

関連するQ&A