我有一系列查询可以找出每个用户在一系列事件中的最佳位置(注意:所有用户都有相同的$points_pos
,所以我看的是一个有辨别力的值)。查询为每个用户循环。
$max=$amount+1;
$i=1;
$highestsofar="99";
$numpointsall = "SELECT driver, position FROM standings_drivers WHERE season='42' AND points='$points_pos'";
$numall = mysql_query($numpointsall);
while ($i<$max) {
while ($row = mysql_fetch_row($numall)) {
$driver_id = $row[0];
$posvar = "SELECT position FROM results WHERE compId='$compId' AND driverId='$driver_id' AND eventID>='$firstevent' AND eventID<='$lastevent' AND (eventSession!='T' AND eventSession!='P' AND eventSession!='Q' AND eventSession!='Q1' AND eventSession!='Q2' AND eventSession!='QA') ORDER BY position ASC LIMIT 1";
$posres = mysql_query($posvar);
while ($row = mysql_fetch_row($posres)) {
$highestpos = $row[0];
}
$i++;
}
}
为每个$highestpos
建立了$driver_id
后,如何按照最佳位置(即$highestpos
最低的位置)排列它们?
理想情况下,我想要实现能够告诉我的事情:
$driver_id = 1
$driver_id = 2
等
所以我可以通过将它们放在正确的位置顺序来修改表格。
编辑:其他信息
results
表格如下所示:
ID compId eventId eventSession driverId position
1 2 739 R 563 7
2 2 739 R 903 1
3 2 562 R 874 16
...
在上面的例子中,假设739和562是范围内事件的ID,我想在driverId中按如下顺序排序三个用户:
903 = 1st
563 = 2nd
874 = 3rd
感谢您的帮助!
答案 0 :(得分:1)
关于SQL的一点是它通常比你(或我)获取数据要好得多。 Microsoft,Oracle等的开发人员和架构师花费了大量的时间和精力来研究选择数据的最佳方法,因此尝试复制他们的工作(如循环结果和获取值等)通常是错误。
您的所有代码都可能被单个SQL查询替换:
SELECT
SD.driver,
MIN(R.position) AS highest_position
FROM
Standings_Drivers SD
INNER JOIN Results R ON
R.driver = SD.driver AND
R.compId = ? AND
eventID >= ? AND
eventID <= ? AND
eventSession NOT IN ('T', 'P', 'Q', 'Q1', 'Q2', 'QA')
WHERE
SD.season = '42' AND -- Should this really be a string and not an integer?
SD.points = ?
GROUP BY
SD.driver
ORDER BY
MIN(R.position)
问号是您传递各种参数的地方。确保您正在将其作为参数化查询执行,而不仅仅是构建完整的字符串。我不用PHP编程,所以我不知道它的语法。谷歌搜索“sql注入php”应该可以帮助你。