Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 组合多个mysql查询以获得一行结果_Php_Mysql_Sql - Fatal编程技术网

Php 组合多个mysql查询以获得一行结果

Php 组合多个mysql查询以获得一行结果,php,mysql,sql,Php,Mysql,Sql,这是我的桌子:问题 id | name -----+----- 2 | name 1 3 | name 2 4 | name 3 5 | name 4 10 | name 5 20 | name 6 21 | name 7 我的id是5,我需要得到上一行和下一行,所以如果id是5,我需要得到4,5和10 现在我正在使用这些查询 select * from question where id = (select max(id) from questio

这是我的桌子:问题

id   | name
-----+-----
 2   | name 1
 3   | name 2 
 4   | name 3
 5   | name 4
 10  | name 5 
 20  | name 6
 21  | name 7
我的id是5,我需要得到上一行和下一行,所以如果id是5,我需要得到4,5和10

现在我正在使用这些查询

select * from question where id = (select max(id) from question where id < 5);
select * from question where id = (select min(id) from question where id > 5);
如果没有上一个id或下一个id,则应为0或-1

For example
id: 5
Return : 4, 5, 10

id:2
Return : -1, 2, 3

id: 21
Return 20, 21, -1
我知道如何在PHP中使用多个查询和一些if条件来实现这一点,但如果可能的话,我正在寻找一种纯mySQL方法。

下一个RecordID:

SELECT * FROM `table_name` WHERE ID > $id ORDER BY ID LIMIT 1;
SELECT * FROM `table_name` WHERE ID < $id ORDER BY ID LIMIT 1;
对于上一个记录ID:

SELECT * FROM `table_name` WHERE ID > $id ORDER BY ID LIMIT 1;
SELECT * FROM `table_name` WHERE ID < $id ORDER BY ID LIMIT 1;

这里$id是php中的一个变量,它会根据您的需要进行更改

这里有几个示例,其他人可以告诉您哪一个更有效

问题1

问题2

啊,没有看到-1的定义,需要更多的黑客。Coalesce函数接受1..n个参数并返回第一个非空值

问题3


这与我的问题类似。我在找别的东西。请核对问题。
Select
  (select max(id) from question where id<5) as prevId,
  id,
  (select min(id) from question where id>5) as nextId
From question 
Where id=5;
Select
  Coalesce( (select max(id) from question where id<21), -1) as prevId,
  id,
  Coalesce( (select min(id) from question where id>21), -1) as nextId
From question
Where id=21;