Date au format text dans BDD

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Date au format text dans BDD

Re: Date au format text dans BDD

par moogli » 24 janv. 2014, 10:56

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 ;)

@+

Re: Date au format text dans BDD

par fabricephp88 » 24 janv. 2014, 10:32

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

par moogli » 23 janv. 2014, 22:43

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

par Aureusms » 23 janv. 2014, 22:11

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

par sirakawa » 23 janv. 2014, 21:54

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

par fabricephp88 » 23 janv. 2014, 21:16

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

par sirakawa » 23 janv. 2014, 21:12

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).

Date au format text dans BDD

par fabricephp88 » 23 janv. 2014, 20:15

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']; 
}