Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
700 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Requête MySQL qui fonctionne dans PhpMyAdmin mais pas dans mon script

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requête MySQL qui fonctionne dans PhpMyAdmin mais pas dans mon script

n°1615700
apophyss
Posté le 26-09-2007 à 18:42:16  profilanswer
 

Bonjour,
j'arrive a exécuter la requête SQL dans PhpMyAdmin,
mais dans mon script, j'ai systématiquement une erreur...
 

Code :
  1. $requete  = " SELECT @dt := max(STA_DATE) FROM T_STA_STATS; ";
  2. $requete .= " SELECT @nb := count(*) FROM T_USR_USER where USR_DATE_LAST = @dt; ";
  3. $requete .= " UPDATE T_STA_STATS SET STA_NB_USR = @nb WHERE STA_DATE = @dt; ";
  4. $result = mysql_query($requete);
  5. if (!$result) error_sql_log("[ERREUR:]", $requete);


 
 
Quelqu'un aurait une idée s'il vous plait ???
 
 
Ce que fait la requête :
- récupération de la date maxi enregistrée dans les stats
- récupère le nombre d'utilisateur qui ont comme dernière date d'utilisation cette date là.
- mise à jour de la ligne avec la valeur trouvée à la date indiquée.
 

mood
Publicité
Posté le 26-09-2007 à 18:42:16  profilanswer
 

n°1615704
weed
Posté le 26-09-2007 à 18:50:57  profilanswer
 

par curiosité, tu utilises des variables MySQL, c'est bien ca ?  
 
sinon tu ne peux pas executer plusieurs requetes en meme temps. Phpmyadmin les dispatch automatiquement.
 
Pour avoir le type d'erreur => mysql_error()

n°1615712
apophyss
Posté le 26-09-2007 à 19:18:34  profilanswer
 

Oui, les variables MySQL (c'est la 1ère fois).
 
J'avais mis des point-virgules à la fin pour enchainer,
c'est peut être ça ?
Je dois en faire 3 ?
 
l'erreur que j'ai dans le log :
You have an error in your SQL syntax.  Check the manual that corresponds to your MySQL server version for the right syntax to use near ';  SELECT @nb := count(*) FROM T_USR_USER where USR_DATE_LAST =;
 

n°1615713
apophyss
Posté le 26-09-2007 à 19:22:37  profilanswer
 

J'ai essayé en 3 fois,
pas d'erreur, mais pas de changement de valeurs...
(comme si les variables ne transmettaient pas leur valeurs)

n°1615728
leflos5
On est ou on est pas :)
Posté le 26-09-2007 à 19:59:51  profilanswer
 

Si t'utilises les variables, elles disparaissent une fois la requête éxécutée je pense, c'est normal que ça change rien.
Soit fais ça avec une procédure stockée, un trigger, un script qui gère les valeurs :spamafote:


Message édité par leflos5 le 26-09-2007 à 20:00:04
n°1616284
apophyss
Posté le 27-09-2007 à 18:25:41  profilanswer
 

MERCI !
 
Bon, je fais 3 requêtes, et récupères les variables via php.
Ce qui donne :

Code :
  1. $requete  = " SELECT max(STA_DATE) FROM T_STA_STATS; ";
  2.   $result = mysql_query($requete);
  3.   if (!$result) error_sql_log("[ERR-IJ0a]", $requete);
  4.   list($dt) = mysql_fetch_row ($result);
  5.   $dt = date("Ymd", strtotime($dt));
  6.   //
  7.   $requete = " SELECT count(*) FROM T_USR_USER where USR_DATE_LAST = '" . $dt . "' ";
  8.   $result = mysql_query($requete);
  9.   if (!$result) error_sql_log("[ERR-IJ0b]", $requete);
  10.   list($nb) = mysql_fetch_row ($result);
  11.   //
  12.   if ( strval($nb) > 0 and ($dt != '') )
  13.   {
  14.     $requete = " UPDATE T_STA_STATS SET STA_NB_USR = " . $nb . " WHERE STA_DATE = '" . $dt . "' ";
  15.     $result = mysql_query($requete);
  16.     if (!$result) error_sql_log("[ERR-IJ0c]", $requete);
  17.   }


Message édité par apophyss le 29-09-2007 à 10:24:04
n°1616289
omega2
Posté le 27-09-2007 à 18:48:42  profilanswer
 

A tester pour voir vu que t'es en mysql:

Citation :

UPDATE T_STA_STATS T1,T_STA_STATS T2
set T1.STA_NB_USR = (SELECT count(*) FROM T_USR_USER where USR_DATE_LAST = max(T2.STA_DATE) )
where T1.STA_DATE = max(STA_DATE)


Par contre je ne garantie pas le résultat (pas testé) ni la vitesse (requête imbriqué)
 
Je pense qu'il est également possible de faire la même chose avec moins de perte de vitesse en faisant une requête du genre :

Citation :

UPDATE T_STA_STATS,  
(SELECT count(*) nb, max(STA_DATE) DATE_MAX FROM T_STA_STATS,T_USR_USER where USR_DATE_LAST = max(STA_DATE)) T2
SET T_STA_STATS.STA_NB_USR = T2.nb
WHERE STA_DATE =  
T2.DATE_MAX


La encore je n'ai pas testé donc je ne suis pas certain à 100% que ça marche sans erreur mais normalement ça devrait être bon.
 
 
A noter que c'est pas des façons très habituelle de faire et la seconde risque de ne marcher qu'avec mysql.

n°1616388
leflos5
On est ou on est pas :)
Posté le 28-09-2007 à 03:07:56  profilanswer
 

J'avais pas pensé aux requêtes imbriquées dans ce cas, j'avais même pas regardé ce que tu voulais.
 
En effet doit y'avoir moyen de le faire autrement en une requête imbriquée si t'as un mysql >=5
 
Tu veux faire quoi au juste :??: Pourquoi un update et pas simplement un insert une fois par jour :??: Ton tuple est crée au début de la journée (ou au premier connecté de la journée) et tu le mets à jour toutes le x minutes, c'est ça :??:
 
En gros la date en question tu la connais ou faut aller la chercher (vu que c'est la dernière apparement) ?
 
Parce que y'a même pas besoin d'aller chercher si loin si tu connais la date dès le départ ;)

n°1616883
apophyss
Posté le 29-09-2007 à 10:21:44  profilanswer
 

Le where USR_DATE_LAST = max(STA_DATE) ne marche justement pas... (snif)
 
J'essaies d'être compatible avec le plus de versions possibles de MySQL et php (vu que c'est un script redistribué).
 
 
Je fais cet update, justement, juste AVANT l'insert de la ligne de stats du jour : donc je récupère les valeurs de la veille.
(pour afficher celle du jour, que je recalcule en live)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Requête MySQL qui fonctionne dans PhpMyAdmin mais pas dans mon script

 

Sujets relatifs
Créer un script permettant de lister dossier et sous-dossiersInstaller phpMyadmin
checkbox ne fonctionne pasAide pour une requête
script ou soft imprimant automatiquement un PDFcréer un script ou logiciel pour modifier une page web automatikement
[RESOLU] - Probleme requete SQL - RETURNAide sur requete SQL avec variable PHP
[MySQL ODBC]not a Mach-O MH_BUNDLE file typefermeture de session ->écriture dans une base de donnée mysql
Plus de sujets relatifs à : Requête MySQL qui fonctionne dans PhpMyAdmin mais pas dans mon script


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR