我正在为竞赛水手编写一个小应用程序,但我有一个问题。我需要来自特定水手的上方 2 行和下方 2 行的数据。我的数据库如下所示:
这是我用来获取上方和下方数据的 SQL:
$data_above= mysql_query("SELECT * FROM Laser_Radiaal WHERE points < (SELECT points FROM Laser_Radiaal WHERE PLACE = ID) ORDER BY PLACE DESC LIMIT 2");
$data_under= mysql_query("SELECT * FROM Laser_Radiaal WHERE points < (SELECT points FROM Laser_Radiaal WHERE PLACE = ID) ORDER BY points ASC LIMIT 2");
但是它不起作用,我做错了什么?
谢谢!
编辑:我收到以下错误:
Warning: mysql_fetch_array() expects parameter 1 to be resource
最佳答案
您的第一个查询提取了正确的结果,但顺序相反。使用 array_reverse()反转结果的顺序。
在第二个查询中使用 >=
和 LIMIT 3
来拉取目标值和上面的两个。
使用array_merge合并两个数组。
以下代码(using PDO)说明了这一点。
//Prepare below query
$query1 ="SELECT * FROM Laser_Radiaal WHERE points <
(SELECT points FROM Laser_Radiaal WHERE PLACE = ?)
ORDER BY PLACE DESC LIMIT 2";
$stmt1 = $dbh->prepare($query1);
// Assign parameter
$stmt1->bindParam(1,$ID);
//Execute query
$stmt1->execute();
$result1 = $stmt1->fetchAll();
$result1r = array_reverse($result1);
//Prepare abovequery including target
$query2 ="SELECT * FROM Laser_Radiaal WHERE points >=
(SELECT points FROM Laser_Radiaal WHERE PLACE = ?)
ORDER BY PLACE ASC LIMIT 3";
$stmt2 = $dbh->prepare($query2);
// Assign parameter
$stmt2->bindParam(1,$ID);
//Execute query
$stmt2->execute();
$result2 = $stmt2->fetchAll();
$finalResult = array_merge(array_reverse($result1), $result2);
print_r(array_values($finalResult));
关于php - 选择 SQL 上方和下方的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21075756/