Pouvez-vous ajouter une instruction if dans l'ORDRE?
Je suis en train d'atteindre les objectifs suivants:
J'ai une seule COMMANDE PAR une instruction qui peut varier en fonction de la valeur stockée dans la Colonne A.
Par exemple:
si le Type est Membre de trier par membre nom de famille
si le Type de regroupement, de tri par le Nom du Groupe
à la fois dans l'ordre Croissant.
Ma meilleure supposition de la déclaration finale serait:
SELECT *
FROM table
WHERE STATUS = 'Active'
ORDER BY ((LNAME if TYPE = 'Member') OR (GROUPNAME if TYPE = 'Group')) ASC
Je sais que c'est incorrect, mais ne peut pas trouver l'information ailleurs. Des idées?
- Ainsi est-il possible que la requête retourne les deux types? Et si ne voulez-vous pas dire qu'il y a deux requêtes différentes une pour chaque type, alors il est facile de faire une clause order by pour chaque.
- nous faisons cela dans le cas où le type ou le type est connu à l'avance (pensez à trier par lettre du nom), mais cela ne semble pas fonctionner dans ce cas particulier. Par exemple: $query = "SELECT * from table where STATUT = 'Active' ET ((LNAME LIKE 'A%' ET la PARTIE = 'Membre') OU (GROUPNAME LIKE 'A%' ET la PARTIE = 'Groupe')) ORDER BY KDATE ASC"; fonctionne }
- Avez-vous changé le
KDATE
colonne d'une façon plus appropriée de la colonne type encore (Telles que laDATE
ouDATETIME
)? - Je l'ai fait sur quelques nouveaux tableaux et je suis dans le processus de migration des anciennes tables pour le nouveau format. Le problème principal a été suivi d'un "live" du site et de la base de données et de trouver la meilleure façon de modifier les scripts PHP avec base de données des structures sans gâcher un site qui prend de 400 inscriptions par jour.
- Le progrès est la chose la plus importante. Rome ne s'est pas construite en un jour. Je suis heureux d'entendre qu'au moins les choses avancent vers le bas le meilleur chemin...
- merci pour les encouragements! Son été une corvée, mais je pense qu'il sera bien la peine à la fin. Je prends aussi de vos conseils, de marche arrière et de restructurer l'ensemble de bases de données pour supprimer 'texte' types et de le remplacer avec peu de varchars (pour des choses comme les noms et les prénoms)
Vous devez vous connecter pour publier un commentaire.
Bien, vous pouvez utiliser le
IF
fonction dans MySQL (Note de l'accent mis surfunction
puisqu'il y a aussi une autreIF
déclaration)...:Toutefois, dans ce cas, il semble que le meilleur choix (à Partir d'un point de vue de la flexibilité) serait le
CAS
déclaration:Noter que l'ensemble du bloc de
CASE
àEND
est considéré comme une seule "unité". Le résultat de ce qui est de ce que vous essayez de trier contre (c'est pourquoi l'ASC
vient après le bloc, plutôt qu'à l'intérieur de celui-ci)...ASC
il va après leEND
. Désolé, je vais modifier la réponse à faire que de plus en plus clair...Utiliser l'instruction case.
Exemple de http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html: