2013-04-25 28 views
0

对于“傻瓜式编程”问题事先道歉......我徒劳地搜索了以前对此的讨论。使用基于用户输入的PHP/MySQL对结果进行排序

所以我有一个充满了动力艇的MySQL表。每行都有基本的动力艇信息(制作/模型/等),加上1-10分的几个不同特征 - “力量”,“舒适”和“风格”。我想帮助用户找到满足他们个人需求的摩托艇。

默认情况下,该数据是由“totalscore”从高责令低,像这样:

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

...并通过与PHP的成果我循环并显示它们作为一个列表。

但后来我给用户提供一系列有中/否的问题,以确定个人的喜好,我想每个答案变化 totalscore在用户会话的价值 - 从而改变列表项目的顺序。

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

图示例

  1. 波士顿捕鲸船370功率= 7,舒适= 8,式= 6,totalscore = 21
  2. 波士顿捕鲸船350功率= 5,舒适= 7,式= 8,totalscore = 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 
    } 

等等

什么绊倒了我概念是,而原始totalscore来自数据库查询$_SESSION["totalscore"]将被存储为一个cookie。所以一旦我从totalscore切换到$_SESSION["totalscore"],我不知道如何重新排列列表项目。

有人能指出我在正确的方向,如果只是在一个示意图?我想弄明白,但是我不确定此时需要弄清楚什么。非常感谢。

回答

0

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

+0

谢谢,但我可能更多的是假的比你把我的。 :)你能简单地解释一下,我将会话变量“存储”到数据库的结果中吗?我了解PHP排序选项,但我不明白如何将会话变量和数据库结果打包在一起。谢谢。 – motorbeast 2013-04-25 01:38:35

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?

+0

谢谢,我打算给这一个镜头。我对运行多个数据库查询持怀疑态度,但至少让它启动并运行将是一种解脱。 – motorbeast 2013-04-25 04:11:07

+0

阅读我的编辑以获得更好的查询。 – 2013-04-25 04:26:42

相关问题