Php 编写mysql连接和order by
我有三张桌子,如下所示 表Php 编写mysql连接和order by,php,mysql,sql,Php,Mysql,Sql,我有三张桌子,如下所示 表eaa -------------- | id | title | -------------- | 1 | ABC | -------------- | 2 | MNO | -------------- | 3 | XYZ | 表eap ----------------------- | id | eaa_id | title | ----------------------- | 1 | 1 | CDE | -----------
eaa
--------------
| id | title |
--------------
| 1 | ABC |
--------------
| 2 | MNO |
--------------
| 3 | XYZ |
表eap
-----------------------
| id | eaa_id | title |
-----------------------
| 1 | 1 | CDE |
-----------------------
| 2 | 1 | BLA |
-----------------------
| 3 | 2 | FOO |
----------------------
| 4 | 3 | BAR |
-----------------------
| 5 | 3 | FOB |
-----------------------
和第三个表etp
-----------------------------------
| id | eap_id | trip_id | dest_id |
-----------------------------------
| 1 | 1 | 143 | 104 |
-----------------------------------
| 2 | 2 | 143 | 226 |
-----------------------------------
| 3 | 3 | 143 | 226 |
-----------------------------------
| 4 | 4 | 143 | 226 |
-----------------------------------
| 5 | 5 | 143 | 228 |
-----------------------------------
| 6 | 6 | 128 | 123 |
-----------------------------------
| 7 | 7 | 442 | 154 |
我的问题
我想从eap
表中获取所有数据,以及eaa
表中eaa\u id
的eap
表中trip\u id
列的etp
表中eaa\u id
的所有数据,并想根据查询中给出的dest\u id
表的结果集进行排序与给定的dest_id
匹配的行首先出现,然后是其他行
例如,如果我提供trip_id
as 143和dest_id
as 226,那么结果应该是eap_id
2、3、4的行首先出现,然后是1和5
我到目前为止所做的事情
SELECT
`eap`.*
FROM
`eap`
LEFT JOIN
`eaa`
ON
eaa.id = eap.eaa_id
LEFT JOIN
`etp`
ON
eap.id = etp.eap_id
WHERE
(etp.trip_id = '143')
此查询提供了所有具有eap.id的行,其中trip\u id为143。现在我无法理解如何将dest_id作为226传递到我上面提到的order查询中据我所知,您希望按ABS排序(226-dest_id)
只需在order BY
子句中添加一个CASE
表达式即可。像这样:
...
WHERE etp.trip_id = 143 or etp.dest_id = 226
ORDER BY
CASE WHEN etp.trip_id = 143 AND etp.dest_id = 226 THEN 0 ELSE 1 END, ID;
请在此处查看它的实际操作:
这将把第2、3、4行放在第一行,然后是第1、5行:
| ID | EAA_ID | TITLE |
|----|--------|-------|
| 2 | 1 | BLA |
| 3 | 2 | FOO |
| 4 | 3 | BAR |
| 1 | 1 | CDE |
| 5 | 3 | FOB |
多好的一口啊,为什么不提供一个更简单的数据集和期望的结果呢?最好是作为一个sqlfiddle或一组DDLsIs。亲爱的,这是我问题的答案吗?是的。这看起来只是一个问题。如果你仔细看,这是一个答案。