2013-12-22 2 views
-2

У меня есть три таблицы указано следующееНаписание MySQL присоединиться и заказ по

Таблица 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_id в eap таблицы против trip_id колонки etp таблицы и хочу заказать в результате установленных таким образом, чтобы она упорядоченно от dest_id таблицы etp, указанной в запросе о том, что строки, соответствующие заданному dest_id, на первом месте, затем другие строки поступают позже.

Например если я обеспечиваю trip_id, как 143 и dest_id, как 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_id это 143. Теперь я не могу понять, как я передам dest_id, как 226 в запросе на заказ, как я уже упоминал выше

+0

что за глоток, почему бы просто не предоставить более простой набор данных и желаемый результат - желательно как sqlfiddle или se t DDL – Strawberry

ответ

1

Просто вы можете добавить выражение CASE в пункт ORDER BY, чтобы сделать это. как это:

... 
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 | 
0

Насколько я понимаю, вы хотели бы ORDER BY ABS(226-dest_id).

+0

Является ли это ответом на мой вопрос, дорогой? –

+0

Да. Это просто СМОТРИТ КАК вопрос назад. Это ответ, если подойти поближе. – dkellner

Смежные вопросы