Maison > Questions et réponses > le corps du texte
J'ai une procédure stockée qui doit renvoyer une table après avoir filtré les lignes en fonction de l'entrée. Deux des entrées sont sort_column
和 sort_dir
。查询必须在 sort_dir
方向(ASC 或 DESC)中 ORDER BY sort_column
.
J'ai essayé la requête suivante sans succès. La requête ci-dessous a été simplifiée pour inclure uniquement les termes pertinents. Les autres filtres fonctionnent correctement sans aucun problème.
SELECT * FROM 表 ORDER BY sort_column sort_dir
SELECT * FROM table ORDER BY CAS sort_column
quand 'col1' alors col1_name
QUAND 'col2' ALORS col2_name FIN
CASE sort_dir QUAND 'asc' ALORS ASC
AUTRE DESC FIN
J'ai connecté 2 entrées à 1 entrée au format _ et j'ai essayé ce qui suit :
SELECT * FROM table ORDER BY CASE sort_input WHEN 'col1_asc' THEN col1_name ASC WHEN 'col1_desc' THEN col1_name DESC WHEN 'col2_asc' THEN col2_name ASC WHEN 'col2_desc' THEN col2_name DESC END
Je reçois toujours l'erreur #1064. C'est différent dans chacun des cas ci-dessus, mais pointe toujours vers la section "CASE". C'est l'erreur avec l'option 2 mentionnée ci-dessus
##1064 - Il y a une erreur dans votre syntaxe SQL ; vérifiez le manuel de la version de votre serveur MySQL pour 'WHEN 'col1' THEN col1_name END CASE 'asc' WHEN 'desc' THEN DESC ELSE à la ligne 4 Corrigez la syntaxe à utiliser autour'
Le problème ne semble pas être le nom des colonnes. C'est une direction de tri qui ne fonctionne pas. Si j'essaie chacune des options ci-dessus sans les parties "ASC" et "DESC", il n'y a aucun problème.
Est-ce que je fais quelque chose de mal ici ? Existe-t-il un meilleur moyen que CASE ?
Version MySQL : 5.6
P粉2949544472023-11-02 11:28:32
La meilleure façon est multiple 案例
:
ORDER BY (CASE WHEN sort_input = 'col1_asc' THEN col1_name END) ASC, (CASE WHEN sort_input = 'col1_desc' THEN col1_name END) DESC, (CASE WHEN sort_input = 'col2_asc' THEN col2_name END) ASC, (CASE WHEN sort_input = 'col2_desc' THEN col2_name END) DESC,
Cela peut paraître long. Cependant, rappelez-vous la partie CASE
是返回单个值的表达式。因此,您不能将 ASC
和 DESC
作为 THEN
.
La question du type de données est également importante. Le compilateur SQL détermine le type unique de l'expression CASE
. Cela peut entraîner des problèmes inattendus lorsque les colonnes sont de types différents.
La solution la plus simple consiste à utiliser plusieurs expressions CASE
.