Page 1 sur 1

Date au format text dans BDD

Posté : 23 janv. 2014, 20:15
par fabricephp88
Bonjour,
dans une base de donnée j'ai un champ datedebut (qui n'est malheureusement pas au format DATE mais au format Text).
Je souhaite lors de l’affichage de mes données faire un trie par date mais le soucis est que comme il n'est pas au format DATE le trie n'est pas bon.
j'ai donc un trie du genre :
01-03-2014
02-03-2014
03-02-2014
08-02-2014
08-03-2014

au lieu de
03-02-2014
08-02-2014
01-03-2014
02-03-2014
08-03-2014

j'ai essayé dans ma requette d’utiliser STR_TO_DATE() mais... sa ne fonctionne pas, rien ne s'affiche. (c'est peut être pas la bonne méthode)
				
$sql = "SELECT DISTINCT table1.refreserv, table2.id, nom, STR_TO_DATE('datedebut','%d-%m-%Y'), datefin, nbrlocations FROM table1 LEFT JOIN table2 ON (table2.refreserv = table1.refreserv) order by datedebut";
$req = mysql_query($sql) or die('<u>Probleme SQL</u> : '.$sql.'<br>'.mysql_error());  
				
while($resultat = mysql_fetch_array($req)) 
{
	echo $resultat['datedebut']; 
}


Re: Date au format text dans BDD

Posté : 23 janv. 2014, 21:12
par sirakawa
Il faut remplacer les appels à mysql par des appels à mysqli ou pdo (raison officielle:la bibliothèque mysql n'est plus maintenue et sera abandonnée à terme).
$sql = "SELECT DISTINCT table1.refreserv, table2.id, nom, STR_TO_DATE('datedebut','%d-%m-%Y'), datefin, nbrlocations FROM table1 LEFT JOIN table2 ON (table2.refreserv = table1.refreserv) order by datedebut";
je tenterais :
$sql = "SELECT DISTINCT table1.refreserv, table2.id, nom, STR_TO_DATE('datedebut','%d-%m-%Y'), datefin, nbrlocations FROM table1 LEFT JOIN table2 ON (table2.refreserv = table1.refreserv) order by  STR_TO_DATE('datedebut','%d-%m-%Y')";
mais franchement ça irait aussi bien en convertissant tes dates en dates sql (quand tu voudras faire d'autres opérations sur tes dates de début et de fin, ce qui ne manquera pas d'arriver, tu te féliciteras de cet effort).

Re: Date au format text dans BDD

Posté : 23 janv. 2014, 21:16
par fabricephp88
merci pour ton aide mais du coup je n'ai plus les datedebut qui s'affiche dans ma while...

comment je peu convertir mon champs sans perdre mes dates ???

Re: Date au format text dans BDD

Posté : 23 janv. 2014, 21:54
par sirakawa
sauf erreur de ma part avec une table:
lesdates
datetext char(11)
ladate date
initialement ainsi remplie:
+------------+------------+
| date_text | ladate |
+------------+------------+
| 11-01-2014 | |
| 11-02-2014 | |
| 12-02-2014 | |
un coup de:
update lesdates set ladate=  STR_TO_DATE(date_text, '%d-%m-%Y');
donne ceci:
+------------+------------+
| date_text  | ladate     |
+------------+------------+
| 11-01-2014 | 2014-01-11 |
| 11-02-2014 | 2014-02-11 |
| 12-02-2014 | 2014-02-12 |
+------------+------------+

Re: Date au format text dans BDD

Posté : 23 janv. 2014, 22:11
par Aureusms
Pourquoi ne pas convertir les dates dans PHP via strtotime (attention format américain obligatoire) et faire le tri via un sort() ?

Re: Date au format text dans BDD

Posté : 23 janv. 2014, 22:43
par moogli
salut,

deux solutions
- Table heap (mémoire) que tu construis dynamiquement avec le bon nombre de colonne et un champ date plutot que texte dans lequel tu met la valeur à partir de datedebut (+ str_to_date).

- Garder ta requête mais faire le order by sur le résultat du str_to_date et pas sur le champs d'origine :mrgreen:
SELECT DISTINCT table1.refreserv,
                table2.id,
                nom,
                STR_TO_DATE('datedebut', '%d-%m-%Y') as monchampdate,
                datefin,
                nbrlocations
  FROM table1
  LEFT JOIN table2
    ON (table2.refreserv = table1.refreserv)
 order by monchampdate
@+

Re: Date au format text dans BDD

Posté : 24 janv. 2014, 10:32
par fabricephp88
Merci pour vos infos,
je viens de tester :
SELECT DISTINCT table1.refreserv,
                table2.id,
                nom,
                STR_TO_DATE('datedebut', '%d-%m-%Y') AS monchampdate,
                datefin,
                nbrlocations
  FROM table1
  LEFT JOIN table2
    ON (table2.refreserv = table1.refreserv)
 ORDER BY monchampdate
le probleme c'est que quand je fais un echo $resultat['monchampdate']; pour voir mes dates rien ne s'affiche

Re: Date au format text dans BDD

Posté : 24 janv. 2014, 10:56
par moogli
la le plus simple c'est de fournir les structure de table avec de données minimaliste pour ne pas rester dans le flou .

les requêtes sont a tester dans un client sql avant des utiliser avec php ;)

@+