Bonjour à tous,
J'ai déjà posté sur un autre forum spécifique à PHP, mais aucune réponse.
En fait, ma table contient deux champs "debut" et "fin". Dans un premier temps, je souhaiterais récupérer toutes les dates encore valides aujourd'hui, et les organiser par date de fin (les données se terminant bientôt arrivant en premier). Je fais donc ceci :
Jusque là, pas de soucis. Je sais que j'aurais pu utiliser now() mais je tiens à utiliser Php car nous allons nous baser sur plusieurs fuseaux horaires, définis dans la configuration PHP. Ensuite, dans une même requête (car il y aura un LIMIT), je souhaite ensuite récupérer les informations antérieures. En d'autres termes, les données dont la fin a expirée, triée de la plus proche à la plus éloignées. On m'a conseillé de faire un UNION et d'organiser les requêtes avec des alias, comme suit :
Et le résultat dans un print_r :
Tous les résultats sont bien affichés, cependant ça désorganise les résultats de la seconde requêtes. En fait, lorsque j'utilise l'un ou l'autre select, l'ordre est bien suivis. En revanche, lorsque j'utilise les deux avec des alias, ça me les désorganise.
Quelqu'un saurait-il comment faire ?
Merci d'avance
Modifié par Gaylord.P (24 Nov 2011 - 16:00)
J'ai déjà posté sur un autre forum spécifique à PHP, mais aucune réponse.
En fait, ma table contient deux champs "debut" et "fin". Dans un premier temps, je souhaiterais récupérer toutes les dates encore valides aujourd'hui, et les organiser par date de fin (les données se terminant bientôt arrivant en premier). Je fais donc ceci :
SELECT debut, fin FROM table WHERE debut <= "'.date('Y-m-d').'" AND fin >= "'.date('Y-m-d').'" ORDER BY fin ASC
Jusque là, pas de soucis. Je sais que j'aurais pu utiliser now() mais je tiens à utiliser Php car nous allons nous baser sur plusieurs fuseaux horaires, définis dans la configuration PHP. Ensuite, dans une même requête (car il y aura un LIMIT), je souhaite ensuite récupérer les informations antérieures. En d'autres termes, les données dont la fin a expirée, triée de la plus proche à la plus éloignées. On m'a conseillé de faire un UNION et d'organiser les requêtes avec des alias, comme suit :
(SELECT debut, fin, 1 AS organis FROM table WHERE debut <= "'.date('Y-m-d').'" AND fin >= "'.date('Y-m-d').'" ORDER BY fin ASC) UNION ALL (SELECT debut, fin, 2 AS organis FROM table WHERE fin < "'.date('Y-m-d').'" ORDER BY fin DESC) ORDER BY organis ASC
Et le résultat dans un print_r :
Array
(
[0] => Array
(
[ref_doc] => 1945
[deb] => 2011-10-24
[fin] => 2011-11-30
[organis] => 1
)
[1] => Array
(
[ref_doc] => 1909
[deb] => 2011-10-07
[fin] => 2012-02-28
[organis] => 1
)
[2] => Array
(
[ref_doc] => 1412
[deb] => 2008-01-09
[fin] => 2008-01-20
[organis] => 2
)
[3] => Array
(
[ref_doc] => 1482
[deb] => 2011-04-09
[fin] => 2011-04-30
[organis] => 2
)
)
Tous les résultats sont bien affichés, cependant ça désorganise les résultats de la seconde requêtes. En fait, lorsque j'utilise l'un ou l'autre select, l'ordre est bien suivis. En revanche, lorsque j'utilise les deux avec des alias, ça me les désorganise.
Quelqu'un saurait-il comment faire ?
Merci d'avance

Modifié par Gaylord.P (24 Nov 2011 - 16:00)