2010-09-23 5 views
0
$months = array('January', ... , 'December'); 
$sql=' 
SELECT * 
FROM `residencies` 
WHERE `Year` = 2010 
ORDER BY array_search($months,`MonthFrom`) `DayFrom`'; 

Ne fonctionne pas (j'ai déjà craint que), il est supposé que les éléments sont triés d'abord la position de MonthFrom dans le tableau $ mois, et ceux qui ont la même position doivent être triés par DayFrom. Je sais qu'il ya d'autre moyen de pour traiter les dates, mais pour cette requête, je suis lié à cette structure date, toute aide est appréciéeCombiner SQL avec PHP

+0

Pouvez-vous partager un peu plus de code, s'il vous plaît? – Bobby

+0

Comment est-ce lié à PHP? Pouvez-vous donner le backend de base de données au moins? MySQL? – Wernight

+0

le array_search dans $ mois est PHP et la base de données est MySQL – Samuel

Répondre

3
$month_arr = array("January","February","March"); 

$months = implode("', '", $month_arr); 

$query="SELECT * FROM residencies WHERE year = 2010 ORDER BY FIELD('MonthFrom', '$months'), `DayFrom`; 
1
$sql=' 
SELECT * 
FROM `residencies` 
WHERE `Year` = 2010 
ORDER BY DATE_FORMAT(`MonthFrom`,"%M") `DayFrom`'; 

Mais cela va les trier selon l'ordre alphabétique du nom du mois? As-tu réellement besoin de cela ?

Vous pouvez également trier selon MonthFrom et les convertir en texte dans votre code PHP. »

1

On dirait que vous essayez d'utiliser une fonction PHP dans une instruction SQL. Si vous devez trier par MonthFrom, qui est le nom du mois, essayer quelque chose comme ceci:

SELECT * 
FROM `residencies` 
WHERE `Year` = 2010 
ORDER BY FIELD(`MonthFrom`, 'January', ..., 'December'), `DayFrom`; 

(vous pouvez remplir le reste des mois)

1

Je présume du qu estion que vous avez un champ mois dans la base de données qui est stocké en format chaîne, ce qui, comme d'autres commentateurs l'ont dit, rend le tri difficile, d'où la raison pour laquelle vous essayez de mettre les mois en ordre en utilisant le tableau. D'autres ont trouvé des moyens valables pour y arriver étant donné cette contrainte (je pense que la réponse de luckytaxi est probablement la meilleure jusqu'à présent), mais je dirais que si vous avez des mois stockés dans la base de données en format chaîne, alors vous certainement avoir une mauvaise conception de base de données, et si vous avez l'option, vous devriez envisager de le changer. MySQL peut stocker des dates complètes en utilisant les types de données DATE ou DATETIME, donc si vous stockez vos jours, mites et années séparément au moment où il apparaît, vous devriez changer pour les stocker ensemble dans un seul champ. Vous pouvez toujours les interroger séparément, par exemple si vous avez juste besoin du mois, ou de n'importe quelle combinaison - MySQL a des fonctions de gestion de date très puissantes (tout comme PHP).

+0

Je sais, mais la base de données a été conçue avant et d'autres parties du site s'appuient sur cette structure si je change juste la base de données d'autres personnes ne fonctionnera plus - mais sur le long terme, il faudrait certainement le prendre en compte, mais bon, ce n'est pas seulement mon appel, maintenant j'essaie de vivre avec ça jusqu'à ce qu'il y ait un accord – Samuel