是否有一种方法可以将这些查询组合成一个查询?这样我就不会在条件匹配的情况下创建另一个连接。
$sql1 = "select status,ext_status from dnd where ext =:ext order by no desc limit 1 ";
$query = $this->db->prepare($sql1);
$query->execute(array(':ext' => $ext));
$result = $query->fetch();
if($result['status'] != '')
{
$status_no = $result['status'];
}
else
{
if($result['ext_status'] == '51')
{
$sql2 = "select ext,status from dnd where ext =:ext2 and status != '' order by no desc limit 1";
$query2 = $this->db->prepare($sql2);
$query2->execute(array(':ext2' => $ext));
$result2 = $query2->fetch();
if($result2) {
$status_no = $result2['status'];
}
}
else
{
$status_no = $statusActual;
}
}
return $status_no;
编辑:这是表中的示例数据:
+-------+---------------------+---------------------+------+--------+------+------+------+------------+---------------------+-------------+-------------+------+------+----------+
| no | date | date_ext | ext | status | etc1 | etc2 | etc3 | ext_status | datetime | answer_time | hangup_time | src | did | uniqueid |
+-------+---------------------+---------------------+------+--------+------+------+------+------------+---------------------+-------------+-------------+------+------+----------+
| 19103 | 2019-01-01 02:59:46 | 2019-01-01 02:59:46 | 6603 | | NULL | NULL | NULL | 52 | 2019-01-01 02:59:46 | NULL | NULL | NULL | NULL | NULL |
| 19104 | 2019-01-01 08:56:37 | 2019-01-01 08:56:37 | 6601 | | NULL | NULL | NULL | 52 | 2019-01-01 08:56:37 | NULL | NULL | NULL | NULL | NULL |
| 19105 | 2019-01-01 08:56:38 | 2019-01-01 08:56:38 | 6601 | | NULL | NULL | NULL | 51 | 2019-01-01 08:56:38 | NULL | NULL | NULL | NULL | NULL |
| 19106 | 2019-01-01 09:19:00 | 0000-00-00 00:00:00 | 6601 | 31 | NULL | NULL | NULL | 51 | 2019-01-01 09:19:00 | NULL | NULL | NULL | NULL | NULL |
| 19107 | 2019-01-01 10:24:19 | 0000-00-00 00:00:00 | 6601 | 32 | NULL | NULL | NULL | 51 | 2019-01-01 10:24:19 | NULL | NULL | NULL | NULL | NULL |
| 19108 | 2019-01-01 11:57:36 | 2019-01-01 11:57:36 | 6601 | 21 | NULL | NULL | NULL | 51 | 2019-01-01 11:57:36 | NULL | NULL | NULL | NULL | NULL |
| 19109 | 2019-01-01 13:05:12 | 2019-01-01 13:05:12 | 6601 | 22 | NULL | NULL | NULL | 51 | 2019-01-01 13:05:12 | NULL | NULL | NULL | NULL | NULL |
| 19110 | 2019-01-01 16:59:20 | 2019-01-01 16:59:20 | 6601 | | NULL | NULL | NULL | 52 | 2019-01-01 16:59:20 | NULL | NULL | NULL | NULL | NULL |
| 19111 | 2019-01-01 17:00:26 | 2019-01-01 17:00:26 | 6601 | | NULL | NULL | NULL | 51 | 2019-01-01 17:00:26 | NULL | NULL | NULL | NULL | NULL |
| 19112 | 2019-01-01 17:15:20 | 2019-01-01 17:15:20 | 6601 | 11 | NULL | NULL | NULL | 51 | 2019-01-01 17:15:20 | NULL | NULL | NULL | NULL | NULL |
+-------+---------------------+---------------------+------+--------+------+------+------+------------+---------------------+-------------+-------------+------+------+----------+
假设,我想获取ext = 6601的状态,我目前这样查询:
select status,ext_status from dnd where ext =:ext order by no desc limit 1
如果结果的状态为!=”(空),我将使用结果的查询,但是如果status ==''和ext_status =='51',我需要使用它重新查询以获取状态:
select ext,status from dnd where ext =:ext2 and status != '' order by no desc limit 1
我对查询有一个想法,但不幸的是,它不起作用。
SELECT
CASE ext_status = 51 THEN (SELECT STATUS FROM dnd WHERE ext = '8001' AND STATUS != '' ORDER BY NO DESC LIMIT 1)
ELSE STATUS END AS test
FROM dnd WHERE ext = '8001' ORDER BY NO DESC LIMIT 1
SELECT
d.status,
d.ext_status,
COALESCE(d2.status, d.status) test
FROM dnd d
LEFT JOIN (
SELECT ext, status
FROM dnd
ORDER BY no DESC) d2
ON d.ext = d2.ext
AND d2.status != ''
AND d.ext_status = 51
WHERE d.ext = :ext
ORDER BY no DESC
LIMIT 1