Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
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 03/07/2007, 11h39   #1
Nouveau Membre du Club
 
Étudiant
Inscription : novembre 2006
Messages : 35
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2006
Messages : 35
Points : 26
Points : 26
Par défaut [SQL] Problème assez bizarre

Bonjour à tous,

j'ai rencontré un problème bizarre auquel j'ai du mal à trouver une explication :

dans une base de données, j'ai des données et notamment un champs timestamp, dans mon script j'utilise une requête SQL pour les récupérer puis je les traite à l'aide d'une boucle while (mysql_fetch_array ) . Dans cette boucle j'affiche les données 1 à 1 PUIS je les supprime si leur timestamp est inférieur au timestamp actuel (ie plus ancien).
En un mot comme en 100 cela donne :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
$requete = "SELECT timestamp FROM base";
$res = mysql_query($requete);
 
while($donnees = mysql_fetch_array($res))
{
$timestamp_actuel = time();
echo $donnees["timestamp"]."\n";
 
if($donnees["timestamp"] < $timestamp_actuel)
 {
 mysql_query("DELETE FROM base WHERE timestamp='".$donnees["timestamp"]."'");
 echo "bien supprimé\n";
 }
}
Et là seulement les données dont le timestamp est supérieur au timestamp actuel s'affichent . Pourquoi les données avec un timestamp plus ancien ne s'affichent-elles pas alors que je ne les supprime seulement qu'après les avoir affichées?
Dud225 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 11h47   #2
Membre Expert
 
Inscription : janvier 2005
Messages : 2 288
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 2 288
Points : 2 287
Points : 2 287
Es-tu sur d'avoir dans ta base de données des timestamp inférieurs au timestamp actuel justement?

Par ailleurs, au lieu de faire une requete de suppresion pour CHAQUE ligne ayant un timestamp inférieur au timestamp actuel dans ta boucle, tu pourrais faire une seule requete après ta boucle:
Code :
 mysql_query("DELETE FROM base WHERE timestamp < '. $timestamp_actuel."'");
koopajah est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/07/2007, 11h56   #3
Nouveau Membre du Club
 
Étudiant
Inscription : novembre 2006
Messages : 35
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2006
Messages : 35
Points : 26
Points : 26
Citation:
Envoyé par koopajah
Es-tu sur d'avoir dans ta base de données des timestamp inférieurs au timestamp actuel justement?
Certain! Quand je fais des tests en ajoutant dans la base des données avec différents timestamps, il n'y a que ceux dont le timestamp est supérieur au timestamp actuel qui ne s'affichent.

Citation:
Envoyé par koopajah
Par ailleurs, au lieu de faire une requete de suppresion pour CHAQUE ligne ayant un timestamp inférieur au timestamp actuel dans ta boucle, tu pourrais faire une seule requete après ta boucle:
Code :
 mysql_query("DELETE FROM base WHERE timestamp < '. $timestamp_actuel."'");
Bien vu!
Dud225 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/07/2007, 10h45   #4
Nouveau Membre du Club
 
Étudiant
Inscription : novembre 2006
Messages : 35
Détails du profil
Informations personnelles :
Âge : 25

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2006
Messages : 35
Points : 26
Points : 26
Le problème vient du programme sur lequel je travaille. Apparemment il effectue les requêtes SQL en premier. Quand j'enlève la requête DELETE FROM tout fonctionne très bien, ce n'est que quand elle est présente que ça pose problème.

Merci quand même!
Dud225 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 21h08.


 
 
 
 
Partenaires

Hébergement Web