php - 为什么 ORDER BY 不起作用?

标签 php mysql web sql-order-by

我没有编写此代码,它来自 Racetracker (http://sourceforge.net/projects/racetracker/),但我一直在尝试进行一些修改。

我正在尝试制作一个简短的球队排名列表,因此将其限制为 5 支球队。球队排名页面中有“ORDER BY SUM(driverpoints)”,但它没有执行任何操作(该页面使用 Javascript 手动对 HTML 表进行排序)。此外,当我尝试添加 LIMIT 5 时,它同样什么也不做,它只是打印所有不同的团队。这是相关的代码(我在这里删除了很多重复的 OR,因为有 43 个 OR drivername = '$thenames[1]' 限定符,它们不会影响 ORDER BY 是否和 LIMIT 部分工作):

$total= mysql_query("SELECT SUM(driverpoints), SUM(events), SUM(firstplace),
        SUM(qual1stplace), SUM(lapsseason), SUM(lapsledseason), SUM(top5season),
        SUM(top10season), SUM(provisionals) 
    FROM `$whatseriestable` 
    WHERE `year` = $siteyear AND `drivername` = '$thenames[0]' 
        OR `drivername` = '$thenames[1]' 
    ORDER BY `SUM(driverpoints)` DESC LIMIT 5");

同样令人困惑的是,ORDER BY 和 LIMIT 在车手排名汇总中表现良好:

$stn= mysql_query("SELECT * FROM `$whatseriestable` 
    WHERE `year` = $siteyear 
    ORDER BY `driverpoints` DESC LIMIT 10");

为什么这不适用于球队排名?

最佳答案

它可能只是你的 WHERE 子句...... AND 优先于左右

WHERE 
       `year` = $siteyear 
   AND `drivername` = '$thenames[0]' 
    OR `drivername` = '$thenames[1]' 

被解释为

WHERE 
     ( year condition and first driver condition ) 
  OR ( second driver )

我认为你的意思是

WHERE 
     ( year condition )
 and ( first driver condition OR second driver )

将您的驱动程序条件括在 ( ) 括号内。

关于php - 为什么 ORDER BY 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13632845/

相关文章:

php - exec() 和 phantomjs 问题与绝对路径

php - 执行 mysqli 插入查询然后立即选择新行的 ID

php - 用于 PHP/MySQL 开发的 Linux 安装机器

html - 无法更改图像的不透明度

c# - 自定义验证器错误

javascript - JS中的简单计算器

PHP + HTML - 连接到本地 MySQL 数据库

PHP: stream_socket_server()

php - 多维数组输出。请帮我提取并遍历这个烂摊子

mysql - 如何过滤mysql.log整个查询?