Zend Framework SQL sélectionnez la construction de requêtes (ORDER BY)
-
19-09-2019 - |
Question
J'ai une base de données avec la colonne VARCHAR url
. Je voudrais récupérer les lignes afin que ceux qui ont une valeur url
ont la priorité sur les autres lignes, mais sont commandés par ligne de date
(décroissant), donc ORDER BY 'url' DESC, 'date' DESC
travaillerais pas comme il leur ordonnerait premier ordre alphabétique. En gros, il ressemblerait à quelque chose comme ceci:
Tableau:
ID | Url | Date
1 | http://...| 1001
2 | | 1002
3 | | 1003
4 | http://...| 1005
5 | http://...| 1004
Tri:
ID | Url | Date
4 | http://...| 1005
5 | http://...| 1004
1 | http://...| 1001
3 | | 1003
2 | | 1002
Quelle serait la façon zend framework appropriée (ou au moins la requête SQL) pour le faire?
La solution
Avec SQL, vous pourriez donc quelque chose comme ...
Il devient laid genre de si vous permettez des valeurs nulles sur le champ URL aussi bien.
SELECT * , IF(LENGTH(url) = 0 OR url IS NULL, 1, 0) AS nourl
FROM url ORDER BY nourl ASC
vérifie essentiellement pour voir si la longueur de l'URL est supérieure à zéro ou est nul. Si elles le sont, ils sont au bas de la sorte.
Autres conseils
Vous pouvez utiliser order by field('field_name', value) desc
dans l'instruction select.