J'ai une base de données comme ceci:ORDRE MYSQL PAR CAS Problème
-------------------------------------------------------------------
| id_one | id_two | timestamp_one | timestamp_two |
-------------------------------------------------------------------
| 27 | 35 | 9:30 | NULL |
-------------------------------------------------------------------
| 35 | 27 | NULL | 9:35 |
-------------------------------------------------------------------
| 27 | 35 | 9:34 | NULL |
-------------------------------------------------------------------
| 35 | 27 | NULL | 9:33 |
-------------------------------------------------------------------
Je dois tirer les 4 rangs
ORDER BY 'timestamp_one' if 'id_one'=27 or
ORDER BY 'timestamp_two' if 'id_one'=27
Ceci est la déclaration que j'ai maintenant:
SELECT * FROM tablename
WHERE id_one=27 OR id_two=27
ORDER BY
CASE WHEN id_one=27 THEN timestamp_one END DESC,
CASE WHEN id_two=27 THEN timestamp_two END DESC
Cela fonctionne bien dans ce qui est sorties ce:
-------------------------------------------------------------------
| id_one | id_two | timestamp_one | timestamp_two |
-------------------------------------------------------------------
| 27 | 35 | 9:30 | NULL |
-------------------------------------------------------------------
| 27 | 35 | 9:34 | NULL |
-------------------------------------------------------------------
| 35 | 27 | NULL | 9:33 |
-------------------------------------------------------------------
| 35 | 27 | NULL | 9:35 |
-------------------------------------------------------------------
Mais je dois deux colonnes d'horodatage à l'ordre comme ils sont l'un, il ordonne ainsi comme ceci:
-------------------------------------------------------------------
| id_one | id_two | timestamp_one | timestamp_two |
-------------------------------------------------------------------
| 27 | 35 | 9:30 | NULL |
-------------------------------------------------------------------
| 35 | 27 | NULL | 9:33 |
-------------------------------------------------------------------
| 27 | 35 | 9:34 | NULL |
-------------------------------------------------------------------
| 35 | 27 | NULL | 9:35 |
-------------------------------------------------------------------
J'espère que cela a du sens. Essentiellement, j'essaie d'avoir deux colonnes ORDER BY qui sont spécifiques à une condition WHERE. Ensuite, une fois que la colonne ORDER BY correcte est choisie pour cette ligne, elle ordonne les ROWS par l'horodatage dans son ensemble.
Essayez avec cette orthographe "ORDER BY 'timestamp_two' si 'id_two' = 27"? – buru
Si un horodatage ou l'autre est toujours 'NULL', il peut être plus clair de faire' ORDER BY IFNULL (timestamp_one, timestamp_two) '. – dkarp