0

「ダミーのプログラミング」の質問については、事前にお詫び申し上げます...これに関する以前の議論を無駄に検索しました。

これで、パワーボートでいっぱいの MySQL テーブルができました。各行には、基本的なパワーボート情報 (メーカー/モデル/など) に加えて、いくつかの異なる特性 (「パワー」、「快適さ」、「スタイル」) の 1 ~ 10 のスコアが含まれています。ユーザーが個々のニーズに合ったパワーボートを見つける手助けをしたい.

デフォルトでは、データは次のように "totalscore" の高い順に並べられます。

$sql = "SELECT *,(power + comfort + style) as totalscore FROM boats ORDER BY totalscore DESC";

...そして、PHP で結果をループし、リストとして表示します。

しかし、その後、ユーザーに一連の Yes/No の質問をして個々の好みを判断し、それぞれの回答でユーザーのセッションの totalscore の値を変更して、リスト項目の順序を変更したいと考えています。

つまり、はい/いいえのユーザー入力ごとに変更したい...そして、ユーザーの結果は、データベースからの元の合計スコアではなく、$_SESSION["totalscore"]高いものから低いものに並べ替えられる必要があります。$_SESSION["totalscore"]

回路図の例

  1. ボストン ホエーラー 370。パワー=7、快適さ=8、スタイル=6、合計スコア=21
  2. ボストン ホエーラー 350。パワー=5、快適さ=7、スタイル=8、合計スコア=20

質問 1: スタイルが好きですか? はい・いいえ

if Yes {
    $_SESSION["totalscore"] = totalscore + style;
    reorder list items by $_SESSION["totalscore"]; // the 350 is now #1
  }
  if No {
     $_SESSION["totalscore"] = totalscore + (style/2);
     reorder list items by $_SESSION["totalscore"]; // they're now tied for #1
  }

等。

概念的に私を$_SESSION["totalscore"]つまずかせているのは、それが Cookie として保存されるのに対し、元の totalscore はデータベース クエリから取得されることです。そのため、 totalscore から に切り替えると$_SESSION["totalscore"]、リスト項目を並べ替える方法がわかりません。

概略的な方法でのみ、誰かが私を正しい方向に向けることができますか? 私はそれを理解したいのですが、この時点で何を理解すればよいかわかりません。どうもありがとう。

4

2 に答える 2

0

セッションの合計スコアをデータベースから取得した結果に保存し、php のソート機能を使用して結果を並べ替えることができます。

于 2013-04-25T00:49:54.287 に答える
0

1 つの方法は、クエリで合計スコアを選択して結果を一度並べ替える代わりに、ユーザーが設定を変更するたびにクエリを作成することです。

SELECT ( power + rating + style) as total_score from boats order by total_score;

次に、結果をループして、最初の結果セットを表示します。ユーザーが選択できるオプションを与えてから、次のようにクエリを再度実行します。

if(style_matters)
{
   $q = mysql_query("SELECT (power + rating + 2*style) as total_score from boats order by total_score");
   //use this new result set in $q to present the new listing
}
else
{
   $q = mysql_query("SELECT (power + rating + style/2) as total_score from boats order by total_score");
   //use this for result set when style doesnt matter.
}

非常に膨大な数の DB ヒットがある場合、コストのかかる操作になる可能性がありますが、それほど問題になるとは思いません。

ページのリロードを回避するために、AJAX を使用してこのクエリを実行できます。

編集: 6 ~ 7 桁の数値に達するまで、複数の DB クエリが行われていることに気付くことさえありません。ただし、クエリで「SELECT * from」を使用しないでください。使用する正確な列を常に指定してください。また、特定のケースでは、ユーザーに提示する結果の数を制限できます。10 件の結果を 1 ページに表示し、次の 10 件を別のページに表示します。結果を制限すると、クエリに大きな影響を与える可能性があります。

結果が 1 つしかないことがわかっている場合、MySQL クエリに「LIMIT 1」を追加すると高速になりますか?

二重クエリなしのMySQLページネーション?

于 2013-04-25T04:00:19.813 に答える