[php] problème de date... - Programmation
TomsGuide.com : 700 000 inscrits répondent à toutes vos questions high-tech et informatique.
Pour obtenir de l'aide, inscrivez-vous gratuitement !
 




Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : [php] problème de date...
 
Profil : IDNaute
Plus d'informations

Bonjour à tous... :hello:

Voilà mon pb en deux mots:

j'utilise un script connu (Coppermine) mais comme je suis du genre jamais content (je suis français, c'est dans les gênes! :lol: ) je voudrais faire une modif:

- l'existant: des images sont classées en fonction du nombre de clics. Voici la requête utilisée:

Code :
  1. $query = "SELECT $select_columns FROM {$CONFIG['TABLE_PICTURES']} WHERE approved = 'YES'AND hits > 0 $META_ALBUM_SET $keyword ORDER BY hits DESC, filename  $limit";



- ce que je voudrais: que ces images soient classées par nombre de clics par jour, soit l'opération "nombre de clics / (date actuelle - date d'ajout de l'image)"...

Pour ce faire j'ai essayé ceci:

Code :
  1. $now = time();
  2.                 $query = "SELECT $select_columns FROM {$CONFIG['TABLE_PICTURES']} WHERE approved = 'YES'AND hits > 0 $META_ALBUM_SET $keyword ORDER BY hits/($now-ctime) DESC, filename  $limit";



Mais j'ai eu les images classées en fonction de leur date d'ajout... J'ai pensé que "hits/($now-ctime)" posait problème alors j'ai essayé "ORDER BY (hits/($now-ctime))", "(hits*1/($now-ctime*1))", "(hits*1/($now*1-ctime*1))" et "(hits*1/(".$now."-ctime*1))" avec toujours le même résultat... :(

Je finis par croire que c'est la définition de la date actuelle qui pose problème $now = time() ...

Qq'un a une idée?


Message édité par gdn@IDN le 11-10-2006 à 10:06:05
Liens sponsorisés


Inscrivez-vous ou connectez-vous pour masquer ceci.

http://127.0.0.1
Profil : IDNaute
Plus d'informations

pourquoi tu n'utilises pas plutot NOW() qui existe en SQL?

Code :
  1. $query = "SELECT $select_columns FROM {$CONFIG['TABLE_PICTURES']} WHERE approved = 'YES'AND hits > 0 $META_ALBUM_SET $keyword ORDER BY (hits/(NOW()-ctime)) DESC, filename  $limit";


---------------
Réseau IRC Francophone
Les eggdrops en français
Profil : IDNaute
Plus d'informations

vais essayer, je te tiens au courant... ;)

Euh, c'est quoi le format de now()? Car là il me faut le format date / heure en entier... (je sais plus le nom que ça a, mais c'est un nombre de secondes depuis une date, 1/1/70, je crois...)


Message édité par gdn@IDN le 11-10-2006 à 11:53:24
Profil : IDNaute
Plus d'informations

c'est un timestamp, mais normalement time() en php te renvoie un timestamp...

pour avoir un timestamp en sql essyae : UNIX_TIMESTAMP(), car NOW() te renvoie un truc du style YYYY-MM-DD HH:MM

http://127.0.0.1
Profil : IDNaute
Plus d'informations

Ah oui, tu pourrais faire une comparaison avec NOW() (ou une opération) si le champ ctime était un timestamp et non pas un int(11).


---------------
Réseau IRC Francophone
Les eggdrops en français
Profil : IDNaute
Plus d'informations

crazycat@idn a écrit :

Ah oui, tu pourrais faire une comparaison avec NOW() (ou une opération) si le champ ctime était un timestamp et non pas un int(11).



Ben oui ctime est un int(11), avec une valeur comme "1126986919", par exemple (qui correspond à une date et à une heure). Comment faire pour obtenir la date et l'heure actuelle dans ce format?

http://127.0.0.1
Profil : IDNaute
Plus d'informations

ben effectivement, tu es obligé de passer par ton $now = time();
Je pense que c'est ta requète qui foire:

Code :
  1. $query = "SELECT $select_columns, (hits/($now-ctime)) AS moyenne FROM {$CONFIG['TABLE_PICTURES']} WHERE approved = 'YES'AND hits > 0 $META_ALBUM_SET $keyword ORDER BY moyenne DESC, filename  $limit";


---------------
Réseau IRC Francophone
Les eggdrops en français
Profil : IDNaute
Plus d'informations

La requête? Tu veux dire qu'il aime pas que l'opération soit faite après le "order by"? Oki, vais essayer la tienne...

Profil : IDNaute
Plus d'informations

OK, j'ai fait le test, mais ça marche pas plus que les autres essais... Je comprends pas, ça les classe suivant un critère qui n'a absolument rien à voir, le nom du fichier! Je pense que c'est l'ordre par défaut et que la condition n'est donc pas "comprise"...


Message édité par gdn@IDN le 11-10-2006 à 16:56:41
http://127.0.0.1
Profil : IDNaute
Plus d'informations

En fait, j'ai testé et ça marche, mais en forçant le timestamp.

Tu devrais faire un echo de ta requète et la vérifier...


---------------
Réseau IRC Francophone
Les eggdrops en français
Profil : IDNaute
Plus d'informations

Qu'entends-tu par "forcer le timestamp"?

http://127.0.0.1
Profil : IDNaute
Plus d'informations

Lui donner une valeur à toi pour tester, proche d'un des ctime.

Suite à mes tests: Lorsque le rapport hits/($now-ctime) est inférieur à abs(0.01), la base ne ressort que 0.00 donc le tri ne s'effectue plus sur ce rapport, les valeurs étant toutes identiques.

A moins de pouvoir formater le format du résultat, il est impossible de trier sur ces valeurs.


---------------
Réseau IRC Francophone
Les eggdrops en français
Profil : IDNaute
Plus d'informations

EUREKA!

En fait l'intervalle entre la date actuelle et la date d'ajout de l'image est calculé en secondes... Donc le nombre est astronomique. Et comme on divise le nombre de hit par ce nombre gigantesque, on obtient toujours un résultat inférieur à 0.01... Donc je pense qu'en multipliant le nombre de hit par 1 million, on devrait obtenir un résultat probant...

Profil : IDNaute
Plus d'informations

OK, ça fonctionne. Un grand merci!!! :)