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。亲爱的,这是我问题的答案吗?是的。这看起来只是一个问题。如果你仔细看,这是一个答案。