php - 选择 SQL 上方和下方的行

标签 php mysql sql

我正在为竞赛水手编写一个小应用程序,但我有一个问题。我需要来自特定水手的上方 2 行和下方 2 行的数据。我的数据库如下所示:

enter image description here

这是我用来获取上方和下方数据的 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/

相关文章:

php - 我可以在 Laravel 5.2 中创建一个继承自 User 的新类吗?

mysql - 有没有办法在 MySQL 中检索数据类型的最小值?

mysql - ejabberd 16.04 在 mysql 数据库中归档消息

php - 插入 php post vars 时的 sql 语法错误

php - 3合1 mysql语句

php - 从android应用程序插入mysql数据

php - 网站的外部 MySQL 数据库

PHP 回显 SQL 计数

java - 尝试插入 json 数组时出现数据插入错误?

mysql - Magento SQL 查询