steph13 Posté 18 Août 2005 Partager Posté 18 Août 2005 Salut, bon, pour certains, cela va paraitre très simple, mais perso, j'ai encore du mal avec ce truc la.... J'ai une date dans un champ de ma base. (format américain) Je souhaite pouvoir ressortir tout les enregistrement du mois courant. Mais je nais pas vraiment comment faire cette opération de comparaison. J'avais trouve une astuce, avec une comparaison de chaine de caractère, mais je pense qu'il doit y avoir un moyen plus simple. Si vous avez des débuts de pistes à me fournir, z'êtes les bienviendus Merci. Lien vers le commentaire Partager sur d’autres sites More sharing options...
petit-ourson Posté 18 Août 2005 Partager Posté 18 Août 2005 (modifié) Tu peux utiliser une condition de ce type : SELECT ..... FROM ..... WHERE MONTH(tonchamp) = MONTH(NOW()) Voila ;o) edit : Ca fonctionne avec un champ de type datetime Modifié 18 Août 2005 par petit-ourson Lien vers le commentaire Partager sur d’autres sites More sharing options...
snwoman49 Posté 18 Août 2005 Partager Posté 18 Août 2005 (modifié) Sinon si tu utilises un varchar,tu faits un autre varchar ou il y a juste le champs mois+année mis dedans. $date = date('m-Y');SELECT ..... FROM ..... WHERE month_year = '$date' Edit j'avais pas lu que le champ de la date était pas en varchar. Oups,enfin ca te donne une idée quand meme.. Modifié 18 Août 2005 par snwoman49 Lien vers le commentaire Partager sur d’autres sites More sharing options...
petit-ourson Posté 18 Août 2005 Partager Posté 18 Août 2005 (modifié) Effectivement je n'ai pas pris en compte l'année. (enfin ceci dit ce n'était pas demandé) SELECT ..... FROM ..... WHERE MONTH(tonchamp) = MONTH(NOW()) AND YEAR(tonchamp) = YEAR(NOW()) Enfin ça me semble assez propre. Modifié 18 Août 2005 par petit-ourson Lien vers le commentaire Partager sur d’autres sites More sharing options...
recherche_webmaster Posté 19 Août 2005 Partager Posté 19 Août 2005 (modifié) Bonjour, plutot que d'ouvrir un nouveau post je reprend celui-ci pour une question un peu similaire et surement aussi simple : J'ai un champ datetime dans ma base qui se présente comme ça : 2005-18-05 11h46. Je ne veux afficher que le 2005-18-05 (accessoirement dans l'ordre français mais ç'est secondaire). Je récupère les dates dans une bouche while en lisant un mysql-fetch-array. Je fais comment SVP ? Parce que dans ma requête j'ai un ORDER BY date qui prend tout de même en compte les heures. Modifié 19 Août 2005 par recherche_webmaster Lien vers le commentaire Partager sur d’autres sites More sharing options...
steph13 Posté 19 Août 2005 Auteur Partager Posté 19 Août 2005 (modifié) En fait, j'ai resolu mon pb hier... Il me suffit d'utiliser la condition BETWEEN dans ma requête sql, et le tour est joué ! Pour convertir la date US en version Fr, j'utilise une fonction que j'ai trouvé sur le net : function dateUsToFr ($datetime) { sscanf($datetime, "%4s-%2s-%2s %2s:%2s:%2s", $y, $mo, $d, $h, $mi, $s); return $d.'-'.$mo.'-'.$y;}function dateFrToUs ($datetime) { sscanf($datetime, "%2s-%2s-%4s %2s:%2s:%2s", $d, $mo, $y, $h, $mi, $s); return $y.'-'.$mo.'-'.$d;} Ca marche nickel. Le lien qui va bien :Conversion date US vers FR Edit : ajout du lien Modifié 19 Août 2005 par steph13 Lien vers le commentaire Partager sur d’autres sites More sharing options...
recherche_webmaster Posté 19 Août 2005 Partager Posté 19 Août 2005 (modifié) ok alors je viens d'essayer cela : $req="SELECT date FROM table ORDER BY date DESC LIMIT 0,5";$res=mysql_query("$req");while ($rep=mysql_fetch_array($res)){$date= sscanf($rep[date], "%4s-%2s-%2s %2s:%2s:%2s", $y, $mo, $d, $h, $mi, $s); return $d.'-'.$mo.'-'.$y;};echo"$date";};mysql_free_result($res); J'obtiens : Parse error: parse error, unexpected '}' on line 41 edit : la ligne 41 c'est celle qui vient après le echo de la boucle while. Je viens de "corriger" le problème de l'accolade après return maintenant c'est très original, mon tableau est vide et la barre de copyright se colle tout en haut. Modifié 19 Août 2005 par recherche_webmaster Lien vers le commentaire Partager sur d’autres sites More sharing options...
Anonymus Posté 19 Août 2005 Partager Posté 19 Août 2005 Enleves le 'return', il n'a aucun sens dans ton cas : Le 'return' permet de 'retourner' un résultat dans le cas de la fonction. Dans le cas du while, c'est comme s'il zappait tout ce qui se trouve après le 'return', autrement dit, il arrête la boucle, et passe aussitot après l'accolade, oubliant du même coup le 'echo'. Lien vers le commentaire Partager sur d’autres sites More sharing options...
recherche_webmaster Posté 19 Août 2005 Partager Posté 19 Août 2005 (modifié) d'accord, je viens d'essayer ça : $date= sscanf($bob[date], "%4s-%2s-%2s %2s:%2s:%2s", $d, $mo, $y); ;echo" parce que je ne veux que le jour, le mois, l'année, dans cet ordre. j'obtiens: Warning: sscanf(): Different numbers of variable names and field specifiers on line 23 (je n'ai pas dû bien la comprendre cette fonction sscanf...) Modifié 19 Août 2005 par recherche_webmaster Lien vers le commentaire Partager sur d’autres sites More sharing options...
dread Posté 19 Août 2005 Partager Posté 19 Août 2005 déjà essaie ça comme requête : SELECT LEFT(date,10) FROM table ORDER BY LEFT(date,10) DESC LIMIT 0,5 Lien vers le commentaire Partager sur d’autres sites More sharing options...
dread Posté 19 Août 2005 Partager Posté 19 Août 2005 j'en profite pour vous filer une ressource sympa pour les manipulations de chaines avec mySQL : http://support.rapidsite.fr/base_donnees/m...de_chaines.html Lien vers le commentaire Partager sur d’autres sites More sharing options...
recherche_webmaster Posté 19 Août 2005 Partager Posté 19 Août 2005 (modifié) Ok je veux bien essayer, mais je voudrais bien comprendre la requête avant s'il te plaît. Sinon un truc aussi : je voudrais ordonner par date et par libellé: C'est à dire que si j'ai deux mots avec la même date, j'affiche d'abord par date pour tous les mots, puis par ordre alphabétique pour les deux mots avec la même date. Comment je fais pour ça aussi svp ? edit: pas l'air mal ton lien, j'enregistre la page. Modifié 19 Août 2005 par recherche_webmaster Lien vers le commentaire Partager sur d’autres sites More sharing options...
dread Posté 19 Août 2005 Partager Posté 19 Août 2005 (modifié) le SELECT LEFT(date,10) te renvera les 10 premiers caractères de ta date, le fait de le mettre dans le ORDER BY, te permettra de les classer aussi ensuite, pour ton problème de tri il suffit de rajouter ton "mot" dans le ORDER BY : ORDER BY LEFT(date, 10), mot et tu obtiendras le tri que tu désires Modifié 19 Août 2005 par dread Lien vers le commentaire Partager sur d’autres sites More sharing options...
dread Posté 19 Août 2005 Partager Posté 19 Août 2005 si tout ça fonctionne comme tu veux, je t'expliquerai comment passer la date en français dans la requête directement Lien vers le commentaire Partager sur d’autres sites More sharing options...
recherche_webmaster Posté 19 Août 2005 Partager Posté 19 Août 2005 (modifié) ok merci, alors je viens d'essayer, ça marche à moitié, c'est déjà bien: En fait ma requête complète est : $req="SELECT date, mot, specialite ,site FROM maTable ORDER BY date DESC LIMIT 0,5". Donc je viens d'essayer ta formule en mettant : $req="SELECT mot, specialite, LEFT(date,10) site FROM maTable ORDER BY date DESC LIMIT 0,5" et là la date est bien tronquée mais dans le tableau, la ligne site est remplacée par la date. J'ai donc mis une virgule entre LEFT(date,10), site (pensant avoir fait une erreur), et là j'obtiens le site en bonne place dans la colonne mais dans la colonne date, j'ai un -1 qui apparaît. EDIT : non j'ai dis une bétise je viens de vérifier : la colonne date apparait normalement tronquée mais dans la colonne site, et dans la colonne date j'ai donc un -1. Modifié 19 Août 2005 par recherche_webmaster Lien vers le commentaire Partager sur d’autres sites More sharing options...
petit-ourson Posté 19 Août 2005 Partager Posté 19 Août 2005 (modifié) $req="SELECT mot, specialite, LEFT(date,10) site FROM maTable ORDER BY date DESC LIMIT 0,5" Il manque une virgule avant "site" Sinon tu peux aussi a la place de LEFT(date,10) mettre cela CONCAT(DAY(date),'-', MONTH(date) ,'-',YEAR(date)) ... (enfin pas sûr de la syntaxe, j'ai pas de mysql sous la main) Modifié 19 Août 2005 par petit-ourson Lien vers le commentaire Partager sur d’autres sites More sharing options...
recherche_webmaster Posté 19 Août 2005 Partager Posté 19 Août 2005 (modifié) non j'ai dit, j'ai mis une virgule avant site et j'obtiens donc le problème suivant quand même. Euh, je suis tout embrouillé là, avec le LEFT(date,10) je supprime bien la fonction sscanf oui? Modifié 19 Août 2005 par recherche_webmaster Lien vers le commentaire Partager sur d’autres sites More sharing options...
dread Posté 19 Août 2005 Partager Posté 19 Août 2005 quel est le format de ton champ date ? est-ce un vrai champ de type date ? si tel est le cas alors voici le bon code : $req="SELECT mot, specialite, DATE(date), site FROM maTable ORDER BY DATE(date) DESC LIMIT 0,5" Lien vers le commentaire Partager sur d’autres sites More sharing options...
recherche_webmaster Posté 19 Août 2005 Partager Posté 19 Août 2005 mon champ date est au format datetime. Si j'utilise ton code je n'ai plus la limitation aux 10 premiers caractères de la date là? Lien vers le commentaire Partager sur d’autres sites More sharing options...
dread Posté 19 Août 2005 Partager Posté 19 Août 2005 (modifié) bein voilà bouba t'a répondu ! $req="SELECT mot, specialite, CONCAT(DAY(date),'-', MONTH(date) ,'-',YEAR(date)), site FROM maTable ORDER BY DATE(date) DESC LIMIT 0,5" <{POST_SNAPBACK}> avec ce code tu repasses la date en français ! oui oui tu as la limitation aux 10 ! Modifié 19 Août 2005 par dread Lien vers le commentaire Partager sur d’autres sites More sharing options...
recherche_webmaster Posté 19 Août 2005 Partager Posté 19 Août 2005 (modifié) Sinon tu peux aussi a la place de LEFT(date,10) mettre cela CONCAT(DAY(date),'-', MONTH(date) ,'-',YEAR(date)) ... oui mais dans ma table c'est au format US year, month, day, ça va pas marcher ça ? edit: il y'a eu un post avec celui la, je vais donc essayer la requête donnée juste avant, 2mn Modifié 19 Août 2005 par recherche_webmaster Lien vers le commentaire Partager sur d’autres sites More sharing options...
recherche_webmaster Posté 19 Août 2005 Partager Posté 19 Août 2005 bouh alors je viens d'essayer texto la requête j'obtiens : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource on line 22Warning: mysql_free_result(): supplied argument is not a valid MySQL result resource on line 42 la ligne 22 c'est la ligne du while Lien vers le commentaire Partager sur d’autres sites More sharing options...
dread Posté 19 Août 2005 Partager Posté 19 Août 2005 (modifié) mais faut tester la requête dans ton phpMyAdmin et pas dans ton code php ! ensuite le while ne doit plus contenir les même choses, puisque la requête a changé ! procède par étapes : 1/ tu t'assures que ta requête fonctionne et qu'elle te renvoie le résultat escompté 2/ tu l'insères dans ton code php Modifié 19 Août 2005 par dread Lien vers le commentaire Partager sur d’autres sites More sharing options...
recherche_webmaster Posté 19 Août 2005 Partager Posté 19 Août 2005 mais faut tester la requête dans ton phpMyAdmin et pas dans ton code php ! ça change quoi? c'est une question de sécurité ? mais le site n'est pas en ligne. ensuite le while ne doit plus contenir les même choses, puisque la requête a changé ! bien pour le while je fais simplement un $res[date] pour récupérer la date et pareil pour les autres champs. Patience.... Lien vers le commentaire Partager sur d’autres sites More sharing options...
recherche_webmaster Posté 19 Août 2005 Partager Posté 19 Août 2005 (modifié) Bon ça c'est mon code complet, après je déprime : <?php//ici on fait apparaitre le 1er tableau de l'accueil$req="SELECT specialite,nom,site CONCAT(DAY(date),'-', MONTH(date) ,'-',YEAR(date)) FROM annuaire ORDER BY DATE(date) DESC LIMIT 0,5" ;$res=mysql_query("$req");while ($bob=mysql_fetch_array($res)){ echo"<tr><td>$bob[site]</td><td>$bob[specialite]</td><td>$bob[nom]</td><td>$bob[date]</td></tr>";};mysql_free_result($res);?> Modifié 19 Août 2005 par recherche_webmaster Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant