Aller au contenu

requete avec timestamp et dernier resultats


Luckyluk

Sujets conseillés

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

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é par birdyman
Lien vers le commentaire
Partager sur d’autres sites

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

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

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

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

$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

et apres je vous fou la paix ;)

:whistling:

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 :wub:

Lien vers le commentaire
Partager sur d’autres sites

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

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...