Luckyluk Posté 19 Octobre 2006 Partager Posté 19 Octobre 2006 Bonjour, j'ai un peu de mal avec le timestamp j'aimerais pouvoir afficher: selectionner les client 1- du jour 2- du jour precedent 3-des 5 derniers jours et sans le timestamp 1- les 10 derniers inscrits 2- les 20 derniers... 3 - les 30 derniers... j'ai une table client avec id (unique et autoincrement) date_creation (stoqué en timestamp) nom +le reste... Lien vers le commentaire Partager sur d’autres sites More sharing options...
NorSeb Posté 19 Octobre 2006 Partager Posté 19 Octobre 2006 Bonjour, date_creation est stocké en timestamp unix ou sql ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
birdyman Posté 19 Octobre 2006 Partager Posté 19 Octobre 2006 (modifié) Salut, Je pense que pour la sélection de tes clients pour tel ou tel jour, il faut que tu utilise un interval de timestamp (première seconde à la dernière du jour ou des jours voulus), mais il y a peut être plus simple. Pour la sélection des derniers inscrits base toi sur l'ID, tu les trie par ordre décroissant et tu prend que les 10 derniers par exemple. Ca donnera une requête du genre : SELECT * FROM nom_de_ta_table ORDER BY id DESC LIMIT 0, 10. ORDER BY id DESC trie par id décroissant et LIMIT 0, 10 affiche les 10 derniers. Pour plus d'infos, je te conseille l'excellent site du zéro : http://www.siteduzero.com/tuto-3-186-1-les-dates.html @++ Modifié 19 Octobre 2006 par birdyman Lien vers le commentaire Partager sur d’autres sites More sharing options...
captain_torche Posté 19 Octobre 2006 Partager Posté 19 Octobre 2006 Pour retrouver une date à partir d'un Timestamp Unix stocké en base, utilise FROM_UNIXTIME(ton_timestamp, '%Y-%m-%d') Pour avoir les inscrits du jour, ça serait donc : SELECT * FROM client WHERE FROM_UNIXTIME(date_creation, '%Y-%m-%d') = CURRENT_DATE() Pour les inscrits de la veille, il faut retirer un jour avec la fonction ADDDATE : SELECT * FROM client WHERE FROM_UNIXTIME(date_creation, '%Y-%m-%d') = ADDDATE(CURRENT_DATE(), INTERVAL -1 DAY) Pour les inscrits des 5 derniers jours, il faudra préciser un intervalle : SELECT * FROM client WHERE FROM_UNIXTIME(date_creation, '%Y-%m-%d') BETWEEN ADDDATE(CURRENT_DATE(), INTERVAL -5 DAY) AND CURRENT_DATE() Pour la liste des derniers inscrits, Birdyman a déjà répondu Lien vers le commentaire Partager sur d’autres sites More sharing options...
Luckyluk Posté 20 Octobre 2006 Auteur Partager Posté 20 Octobre 2006 bonjour, merci à vous pour les derniers, j'ai tout pigé et ça marche.. par contre j'ai encore des problemes avec les dates j'ai essayé les requetes mais ça passe pas apparemment, je l'apelle depuis une page php... $query = 'SELECT * FROM client WHERE FROM_UNIXTIME(date_creation, '%Y-%m-%d') = CURRENT_DATE()'; ça me met: Parse error: syntax error, unexpected '%' in... Lien vers le commentaire Partager sur d’autres sites More sharing options...
captain_torche Posté 20 Octobre 2006 Partager Posté 20 Octobre 2006 C'est parce que tu utilises le guillemet simple comme début de chaîne de caractère, et que par conséquent le second guillemet rencontré (ici, celui juste avant %Y) est considéré comme la fin de la chaîne. Ensuite, PHP peine à interpréter le signe %, ce qui est compréhensible. Il y a deux solutions possibles : - Tu échappes tes guillemets internes $query = 'SELECT * FROM client WHERE FROM_UNIXTIME(date_creation, \'%Y-%m-%d\') = CURRENT_DATE()'; - ou (plus propre), tu utilises des guillemets doubles pour délimiter ta chaîne de caractères : $query = "SELECT * FROM client WHERE FROM_UNIXTIME(date_creation, '%Y-%m-%d') = CURRENT_DATE()"; (Par contre, il faudrait éventuellement échapper les doubles quotes internes, s'il y en a). Lien vers le commentaire Partager sur d’autres sites More sharing options...
Luckyluk Posté 20 Octobre 2006 Auteur Partager Posté 20 Octobre 2006 merci ! ça marche nickel... un petit dernier pour la route... je recupere la variable num de l'url $num = $_GET['num']; je voudrais ajouter le --> % a coté du $num ci dessous, j'y arrive pas... $query = 'SELECT * FROM client WHERE (codepostal LIKE '.$num.') ORDER BY id_client DESC LIMIT 0, 100'; et apres je vous fou la paix Lien vers le commentaire Partager sur d’autres sites More sharing options...
captain_torche Posté 20 Octobre 2006 Partager Posté 20 Octobre 2006 $query = "SELECT * FROM client WHERE (codepostal LIKE '$num%') ORDER BY id_client DESC LIMIT 0, 100"; On utilise des doubles quotes pour délimiter la chaîne, ce qui fait que la variable $num est interprétée directement dans la chaîne. On y accole ensuite le pourcentage pour que la recherche renvoie tous les codes postaux du département. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Luckyluk Posté 20 Octobre 2006 Auteur Partager Posté 20 Octobre 2006 merci ! il me semblait bien que ça ne pouvait pas etre si biscornu... à la prochaine Lien vers le commentaire Partager sur d’autres sites More sharing options...
Luckyluk Posté 25 Octobre 2006 Auteur Partager Posté 25 Octobre 2006 et apres je vous fou la paix est ce que je peu pousser le bouchon un peu plus loin? avant tout encore merci, ma derniere requete fonctionne bien $query = "SELECT * FROM client WHERE ((codepostal LIKE '$num%') AND( FROM_UNIXTIME(date_creation, '%Y-%m-%d') BETWEEN ADDDATE(CURRENT_DATE(), INTERVAL -7 DAY) AND CURRENT_DATE())) ORDER BY id_client DESC LIMIT 0, 100"; j'aimerais remplacer les 7 derniers jours par "depuisune date fixe" (depuis le 17 octobre 2006) en gros where (valeur timestamp> valeur correspondant au 17/10/2006) je vois souvent des tuto pour transformer un timestamp en date mais pas l'inverse? avec tout ce que je demande , on vas finir par en faire un tuto sur les dates Lien vers le commentaire Partager sur d’autres sites More sharing options...
captain_torche Posté 25 Octobre 2006 Partager Posté 25 Octobre 2006 Là, comme on convertit déjà la valeur de timestamp en date (format aaaa-mm-jj), tu peux carrément mettre la date dans ce format : SELECT * FROM client WHERE (codepostal LIKE '$num%') AND FROM_UNIXTIME(date_creation, '%Y-%m-%d') > '2006-10-17' ORDER BY id_client DESC LIMIT 0, 100 Toutefois, si tu ne veux manipuler que des timestamps, tu peux utiliser UNIT_TIMESTAMP() : SELECT * FROM client WHERE (codepostal LIKE '$num%') AND date_creation > UNIT_TIMESTAMP('2006-10-17') ORDER BY id_client DESC LIMIT 0, 100 Cependant, si tu veux inclure le jour mentionné, n'oublie pas de faire une comparaison >= (supérieur ou égal). Lien vers le commentaire Partager sur d’autres sites More sharing options...
birdyman Posté 25 Octobre 2006 Partager Posté 25 Octobre 2006 (modifié) captain a été le plus rapide Modifié 25 Octobre 2006 par birdyman Lien vers le commentaire Partager sur d’autres sites More sharing options...
captain_torche Posté 25 Octobre 2006 Partager Posté 25 Octobre 2006 Sur une demande de Lucky Luke, c'est la moindre des choses Lien vers le commentaire Partager sur d’autres sites More sharing options...
Luckyluk Posté 25 Octobre 2006 Auteur Partager Posté 25 Octobre 2006 merci les gars ! 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