Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Administration
Administration Forum d'entraide sur l'administration de MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/01/2005, 11h42   #1
wjc
Candidat au titre de Membre du Club
 
Inscription : avril 2004
Messages : 50
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 50
Points : 11
Points : 11
Par défaut where date() > date+24heures

Bonjour,

Je suis en train de développer un petit annuaire de lien.
Pour eviter la triche au niveau du comptage des hit IN j'ai commencé à mettre en place à système de contrôle par ip.
C'est à dire qu'un seul hit par visiteur ne sera compté par tranche de 24 heures.
Donc avant de mettre à jour le nombre de hits in dans la base je fais ce type de contrôle

Voici ma table
Code :
1
2
3
4
5
6
 
 
links_history_ip_id      int(11)       Non        AUTO_INCREMENT      
links_id                  int(11)          Non      0
ip_hits                  varchar(15)    Non    0
links_history_ip_date   datetime      Non   0000-00-00 00:00:00
Voici mon code php
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
  FUNCTION tep_check_unique_hit($link_id) {
$count_hit = false;
$ip_address = tep_get_ip_address();
 
   $ip_count_query = tep_db_query("select count(*) as total from " . TABLE_LINKS_HISTORY_IP . " where ip_hits = '" . $ip_address . "' and links_id = '" . (int)$link_id . "'"); !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
   $ip_count = tep_db_fetch_array($ip_count_query);
 
IF ($ip_count['total'] == 0) {
 INSERT IN TABLE
  $count_hit = true;
}
RETURN $count_hit;
 }
Al'endroit ou j'ai mis les !!!!!!!!(dans la clause where) je souhaite mettre donc cette portion de code :
Code :
1
2
 
AND date_format(now(), '%Y%m%d %H:%i:%s') > date_format(links_history_ip_date, '%Y%m%d %H:%i:%s')+24 hours
Le problème c'est que je ne parvient pas à mettre ça dans une syntaxe correcte merci de me filer un coup de main.

Autrement je peux insérer cette portion de contrôle sur la date comme ceci
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
  FUNCTION tep_check_unique_hit($link_id) {
	$count_hit = false;
	$ip_address = tep_get_ip_address();
 
    $ip_count_query = tep_db_query("select * from " . TABLE_LINKS_HISTORY_IP . " where ip_hits = '" . $ip_address . "' and links_id = '" . (int)$link_id . "'");
 
	IF (tep_db_num_rows($ip_count_query)) { 
      while ($ip_count = tep_db_fetch_array($ip_count_query)) {
        !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  IF ( date('Y-m-d H:i:s') > ($ip_count['links_history_ip_date']+24) ) {
	      tep_db_query("insert into " . TABLE_LINKS_HISTORY_IP . " (links_id, ip_hits, links_history_ip_date) values ('" . (int)$link_id . "', '" . $ip_address . "', now())");
	      $count_hit = true;
	    }
	  }
	}
	RETURN $count_hit;
  }
Voilà donc si quelqun pouvait me filer un coup de main sur la syntaxe pour le controle sur les enreigstrements inférieures à 24 heures et me dire quelle solution utilisée entre la première et la deuxième ce serait sympathique

Merci

wjc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2005, 14h27   #2
Expert Confirmé Sénior
 
Homme Mathias Gaunard
Ingénieur développement logiciels
Inscription : décembre 2003
Messages : 3 543
Détails du profil
Informations personnelles :
Nom : Homme Mathias Gaunard
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : décembre 2003
Messages : 3 543
Points : 4 408
Points : 4 408
Citation:
Le problème c'est que je ne parvient pas à mettre ça dans une syntaxe correcte merci de me filer un coup de main.
La syntaxe SQL, c'est le forum d'à côté.
loufoque est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2005, 14h39   #3
Invité de passage
 
Inscription : janvier 2005
Messages : 3
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 3
Points : 3
Points : 3
ça c'est bien vrai loufoque
mais pour rester en php
tu peut les stocker en timestamp
et faire

SELECT*FROM table WHERE date<timestamptoday-86400
MaâLox est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2005, 16h44   #4
wjc
Candidat au titre de Membre du Club
 
Inscription : avril 2004
Messages : 50
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 50
Points : 11
Points : 11
Merci pour ta réponse désolé pour le post dans la mauvaise catégorie.

Je préfère utiliser la syntaxe mysql pour ce code.

Un admin peut -il déplacer le post dans la bonne rubrique ?

Merci
wjc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2005, 16h45   #5
Membre expérimenté
 
Avatar de KibitO
 
Chef de projet MOA
Inscription : septembre 2004
Messages : 537
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Chef de projet MOA

Informations forums :
Inscription : septembre 2004
Messages : 537
Points : 528
Points : 528
Fais ta demande a un admin par mp, ça ira plus vite car il est pas censé etre sur tous les topics, dc il risque de passer à coté du tien.
KibitO est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/01/2005, 17h10   #6
Expert Confirmé Sénior
 
Homme Mathias Gaunard
Ingénieur développement logiciels
Inscription : décembre 2003
Messages : 3 543
Détails du profil
Informations personnelles :
Nom : Homme Mathias Gaunard
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : décembre 2003
Messages : 3 543
Points : 4 408
Points : 4 408
SELECT * FROM table WHERE date<(UNIX_TIMESTAMP(NOW())-86400)
loufoque est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2005, 16h41   #7
wjc
Candidat au titre de Membre du Club
 
Inscription : avril 2004
Messages : 50
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 50
Points : 11
Points : 11
merci pour ta réponse loufoque mais en fait j'aurais aimé avec la syntaxe exacte de ce type.
C'est plus pour me fomer à un syntaxe correcte que de faire fonctionner le script.

and date_format(now(), '%Y%m%d %H:%i:%s') > date_format(links_history_ip_date, '%Y%m%d %H:%i:%s')+24 hours

Certains vont dire que je suis chaint
Mais c'est important pour moi de comprendre et être capable de respecter une syntaxe.

Merci
wjc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2005, 09h32   #8
Membre Expert
 
Avatar de Alexandre T
 
Inscription : mai 2002
Messages : 1 022
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 1 022
Points : 1 123
Points : 1 123
J'ai fait un annuaire de lien avec cette fonctionnalité : www.clublegendes.com
Tu peux voter une fois par jour avec la mêm ip. Tu peux tester

La méthode est bien plus simple :
Je crée une table avec vote

Code :
1
2
3
4
5
6
7
8
9
 
CREATE TABLE `a_vote` (
 `id_site` mediumint(8) UNSIGNED NOT NULL DEFAULT '0',
 `vote_pour` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
 `vote_contre` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
 `ip` int(10) UNSIGNED NOT NULL DEFAULT '0',
 `jour_vote` date NOT NULL DEFAULT '0000-00-00',
 PRIMARY KEY  (`id_site`,`ip`,`jour_vote`)
) TYPE=MyISAM COMMENT='Stockage quotidien des votes.'
L'astuce est que j'insère la date du jour l'ip et l'id du site. Tu remarqueras dans le code une contrainte d'unicité sur date, ip , id_site. Ainsi un php, j'insère ma ligne. Si mysql me retourne une erreur 1064 ca veut dire que c'est un doublon alors message d'insulte !
IP est un mediumint(8) car j'utilise les fonctionnalités PEAR qui me compresse mon ip en medium.
__________________
Alexandre T.

PHP5/MySQL5 Codes prêts à l'emploi
30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc...

Mes articles
Alexandre T est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2005, 22h18   #9
wjc
Candidat au titre de Membre du Club
 
Inscription : avril 2004
Messages : 50
Détails du profil
Informations forums :
Inscription : avril 2004
Messages : 50
Points : 11
Points : 11
Salut,

Je me suis replongé dans le code aujourd'hui :

la synthaxe propre dans la lignée de mon code est il me semble :

Code :
1
2
 
AND date_format(links_history_ip_date, '%Y%m%d %H:%i:%s') > date_format(SUBDATE(now(), INTERVAL 24 HOUR), '%Y%m%d %H:%i:%s')
En tout cas cela fonctionne.

Comment on fait pour mettre le topic comme "réglé" ?

++
wjc est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h46.


 
 
 
 
Partenaires

Hébergement Web