Consultation en php

Fermé
amal - 29 juin 2010 à 00:34
M@dien Messages postés 437 Date d'inscription mercredi 29 juillet 2009 Statut Membre Dernière intervention 23 septembre 2010 - 30 juin 2010 à 19:49
Bonjour,

je veux selectionner le mois de la date enregistrer dans la base exemple 18/06/2009 11:50:55
je sais une methode mais ca marche pas

"select * from table where MONTH(Date)= "01""
A voir également:

1 réponse

M@dien Messages postés 437 Date d'inscription mercredi 29 juillet 2009 Statut Membre Dernière intervention 23 septembre 2010 74
29 juin 2010 à 07:35
Bonjour,

Quel type de base de données utilises-tu? Mysql?
De quel type est ton champ? Timestamp? Date?

Dans tous les cas, essaye en mettant des simple quotes au lieu des doubles quotes pour la chaîne de caractères.

Je viens de tester avec des champs en Date, Datetime et Timestamp,
et ces deux requêtes fonctionnent pour tous les types de champ:

select * from table where MONTH(Date)= '01'

et

select * from table where MONTH(Date)= 1
0
oui Mysql
le type de champs varchar parce que format que j utilise 00-00-0000 00:00:00
mais quand je declare mon champ date ou datetime ou timestamp je dois entrer la date de la format 0000-00-00 00:00:00 sinn il ne va pas etre enregistrer
0
M@dien Messages postés 437 Date d'inscription mercredi 29 juillet 2009 Statut Membre Dernière intervention 23 septembre 2010 74
30 juin 2010 à 07:54
Alors c'est normal qu'en Varchar la fonction MONTH ne fonctionne pas. Les autres fonctions relatives aux dates ne fonctionneront pas non plus.

L'avantage du format date est la possibilité de trier par date facilement par SQL, et de pouvoir les manipuler. En utilisant un Varchar comme ça, tu n'auras jamais un bon tri, et pour filtrer sur un mois ou un jour, il faudra utiliser les fonctions LEFT et RIGHT pour accéder à la partie de la chaîne de caractère correspondante...
0
merci pour la reponse j ai utilisée varchar pour enregistrer la date de la formart 00/00/0000 00:00:00
si j utilise date ou datetime ou autre je trouve l enregistrement comme ca 0000/00/00 00:00:00
tu peux m expliquer plus slp j ai pas compris
0
M@dien Messages postés 437 Date d'inscription mercredi 29 juillet 2009 Statut Membre Dernière intervention 23 septembre 2010 74
30 juin 2010 à 19:49
Bon je ré-explique.

Supposons que dans ta table tu veuilles mettre 3 dates:
25 décembre 2012, 30 juin 2010 et 1er janvier 2011

Avec ta méthode, on a en VARCHAR 25/12/2012 00:00:00, 30/6/2010 00:00:00 et 1/1/2011 00:00:00.

Seulement les dates ça sert pas qu'à dater, ça sert à ordonner chronologiquement des données.
Donc on va faire une requête du type
SELECT * 
FROM MaTable 
ORDER BY date_en_varchar

Et là, l'ordre retourné sera :
1/1/2011 00:00:00
25/12/2012 00:00:00
30/6/2010 00:00:00
Pourquoi? tout simplement parce que le classement d'un varchar se fait caractère par caractère, en commençant par le 1er. on a l'ordre 1,2,3 qui est respecté dans notre cas, donc pour mysql c'est trié. Par contre dans ton appli, ça sera affiché dans un ordre complètement aléatoire! Et en plus, il faudra gérer les 0 non affichés, si tu veux que la date du 1er janvier soit affichée "01/01/2011"... Quand aux filtres sur un mois ou une année, c'est quasiment impossible!!!

Maintenant, avec un champ datetime, on a les dates comme ça: 2012-12-25 00:00:00, 2010-06-30 00:00:00 et 2011-01-01 00:00:00.
Ok, c'est pas pratique directement, on fait "année/mois/jour". Seulement voilà, une base de données ça sert à stoker, trier et ordonner. Et le champ datetime est puissant.
Si on fait la requête
SELECT * 
FROM MaTable 
ORDER BY date_en_datetime

on aura un ordre bien chronologique, mais toujours en format année/mois/jour

Encore mieux. on peut recréer le format facilement directement en SQL, avec une requête de ce genre:
SELECT concat(day(date),'/', month(date),'/', year(date))
FROM MaTable
ORDER BY date

on aura le BON tri, et avec le bon format, ou presque:
30/6/2010
1/1/2011
25/12/2012
Avec une requête encore plus fine, il est possible d'obtenir le format en "01/01/2011"

Mais on peut aussi gérer ça dans le programme!
En PHP par exemple (je ne sais pas en quoi tu fais ton application), il y a le type de variable Date qui est puissant pour changer le style d'une date:
https://www.php.net/manual/fr/function.date.php

Ainsi avec le type datetime en base de données et le type de variable Date en PHP, on a ces avantages:
- Possibilité de formater facilement la date pour l'insertion de la date en base de données
- Facilité dans le tri et le filtrage des données en base
- Facilité dans la récupération de la date à partir de la base
- Facilité de personnalisation de la date pour l'affichage dans l'application: on peut quasiment tout faire, du "30-06-2010" au "2010, le 30/06" ou même "mercredi 30 juin 2010" si on approfondi dans la programmation.


Bref, j'espère avoir été clair et persuasif =)
Il faut juste se souvenir que les outils sont là pour nous simplifier la vie, et nous offrir plus de fonctionnalités. Passer à côté de ces outils revient à revenir en arrière, et galérer à coder son application, et au final, poster des messages sur CommentCaMarche! ^^

Bon courage à toi et n'hésite pas à chercher des infos sur PHP et SQL pour trouver des astuces!
0