MYSQL COMMANDE EN CAS de Problème
J'ai une base de données comme ceci:
-------------------------------------------------------------------
| 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 |
-------------------------------------------------------------------
J'ai besoin de tirer tous les 4 lignes
ORDER BY 'timestamp_one' if 'id_one'=27 or
ORDER BY 'timestamp_two' if 'id_one'=27
C'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 qui est sorties ceci:
-------------------------------------------------------------------
| 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 j'ai besoin de deux colonnes timestamp à l'ordre comme ils sont une sorte il commande 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, je suis en train d'avoir deux colonnes qui sont spécifiques à une condition where. Puis, une fois le bon de COMMANDE PAR colonne est choisi pour cette ligne, il commande les LIGNES en fonction de l'horodatage dans son ensemble.
Vouliez-vous dire "trier PAR "timestamp_two' si 'id_two'=27"?
Si l'un d'horodatage ou de l'autre est toujours
Si l'un d'horodatage ou de l'autre est toujours
NULL
, il peut être plus clair pour faire ORDER BY IFNULL(timestamp_one, timestamp_two)
.
OriginalL'auteur ATLChris | 2010-12-03
Vous devez vous connecter pour publier un commentaire.
Cela devrait aussi fonctionner avec une base de données qui prend en charge le conditionnel - je crois que les deux de ceux que vous avez mentionné des CAS de prise en charge.
qu'en est-il NUL? comment envisager une telle ligne?
OriginalL'auteur RedFilter
OriginalL'auteur buru
OriginalL'auteur Esdras