使用PHP / MySQL根据用户输入对结果进行排序

时间:2013-04-25 00:35:06

标签: php mysql sorting

提前为“傻瓜编程”问题道歉......我之前对此事的讨论都是徒劳的。

所以我有一个装满动力艇的MySQL桌子。每行都有基本的动力艇信息(品牌/型号/等)以及1-10的分数,用于几个不同的特征 - “力量”,“舒适”和“风格”。我想帮助用户找到满足他们个性化需求的摩托艇。

默认情况下,数据按“totalscore”从高到低排序,如下所示:

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

...然后我用PHP循环结果并将它们显示为列表。

然后我给用户一系列的是/否问题以确定个人偏好,我希望每个答案在用户会话中更改 totalscore的值 - 从而改变顺序列表项目。

换句话说,我希望$_SESSION["totalscore"]随每个是/否用户输入而改变...然后用户的结果应该按照$_SESSION["totalscore"]从高到低排序,而不是原来的总计数据库。

原理图示例

  1. Boston Whaler 370. power = 7,comfort = 8,style = 6,totalscore = 21
  2. Boston Whaler 350. power = 5,comfort = 7,style = 8,totalscore = 20
  3. 问题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,而原始的totalalscore来自数据库查询。所以一旦我从totalscore切换到$_SESSION["totalscore"],我就不知道如何重新排序列表项。

    如果只是以原理图的方式,有人能指出我正确的方向吗?我想弄清楚,但我不知道在这一点上要弄清楚什么。非常感谢。

2 个答案:

答案 0 :(得分:0)

您可以将会话中的totalscore存储到从数据库中返回的结果中,并使用php的排序功能对结果进行重新排序。

答案 1 :(得分:0)

一种方法是,不是在查询中选择总分,然后对结果进行排序,而是每次用户更改首选项时进行查询

实施例

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.
}

如果你有大量的数据库命中,这可能是一项昂贵的操作,但我认为这不是一个大问题。

您可以使用AJAX运行此查询以避免页面重新加载。

编辑:在你开始打6-7位数字之前,你甚至不会注意到多个数据库查询。虽然您不应该在查询中使用“SELECT * from”。始终指定要使用的确切列。在特定情况下,您可以限制向用户显示的结果数量。在一页上显示10个结果,在另一页上显示10个结果。限制结果可能会对查询产生重大影响。

Does adding 'LIMIT 1' to MySQL queries make them faster when you know there will only be 1 result?

MySQL pagination without double-querying?

相关问题