Se connecter avec
S'enregistrer | Connectez-vous

Trier le résultat d'un mysql_query de plusieurs bases

Dernière réponse : dans Programmation

Salut, mon code me renvoi une parse error Parse error: syntax error, unexpected T_STRING in . .. on line 4



<?php
mysql_connect('mysql.free.fr', 'login', 'mdp');
mysql_select_db("teamlfv");
INSERT INTO abdel_bachir (idgame,datetime,kills,deaths) VALUES

('','','$_POST['k1']','$_POST['k2']')
?>


Mais je vois pas ce qui cloche ?????

PS : avec un echo a la place de tout ça, il affiche mes valeurs de formulaire . . .
Lassé par la pub ? Créez un compte

INSERT INTO abdel_bachir (idgame,datetime,kills,deaths) VALUES

('','','$_POST['k1']','$_POST['k2']')

'$_POST['k1']' , tu dois rajouter un caractère d'échappement pour neutraliser le premier ', k1 se retouvre en dehors de la string et le moteur php essaie de convertir k1 en quelque chose .Seulement il n'y a pas de $k1 donc il pense à une erreur.
Expert Programmation

mysql_connect('mysql.free.fr', 'login', 'mdp');
mysql_select_db('teamlfv');
mysql_query("INSERT INTO abdel_bachir (idgame,datetime,kills,deaths) VALUES ('','','".$_POST['k1']."','".$_POST['k2']."')") or die (mysql_error());

jour de bonté

Merci okinou !
Mais j'ai encore un soucis avec ce code :
<?php
mysql_connect('mysql.free.fr', 'login', 'mdp');
mysql_select_db('teamlfv');
mysql_query("INSERT INTO abdel_bachir (idgame,datetime,kills,deaths) VALUES ('','CURRENT_TIMESTAMP','".$_POST['k1']."','".$_POST['d1']."')" ) or die (mysql_error());
?>

il ne m'enregistre pas la date et heure dans mon champ prévu a ce effet de ma table :/  j'ai essayé de mettre () juste apres mon current_timestamp, et aussi de le remplacer par now, mais ça ne ^marche pas . . .

PS : ça non plus ça marche pas . . .
<?php
$datetime=current_timestamp
mysql_connect('mysql.free.fr', 'teamlfv', '');
mysql_select_db('teamlfv');
mysql_query("INSERT INTO abdel_bachir (idgame,datetime,kills,deaths) VALUES

('','$datetime','".$_POST['k1']."','".$_POST['d1']."')" ) or die (mysql_error());
?>

EDIT : je viens d'essayer de mettre un champ timestamp plutot dans ma bdd, avec un current_timestamp par defaut, pas d'erreurs, mais il me laisse tout a 0 . ..

quand une instruction ne marche pas, faut pas essayer n'importe quoi non plus...
$datetime=current_timestamp c'est quoi ca, une fonction/variable...
bref enleve les ' autour de CURRENT_TIMESTAMP dans ta requete
Expert Programmation

coca25 a dit :
remercie surtout okinou, parce que la il a fait un enorme effort :D 
et mets un [resolu] dans le titre du topic

tu m'étonnes :D 

julien41@idn a dit :
PS : ça non plus ça marche pas . . .
<?php
$datetime=current_timestamp
mysql_connect('mysql.free.fr', 'teamlfv', '******');
mysql_select_db('teamlfv');
mysql_query("INSERT INTO abdel_bachir (idgame,datetime,kills,deaths) VALUES

('','$datetime','".$_POST['k1']."','".$_POST['d1']."')" ) or die (mysql_error());
?>

EDIT : je viens d'essayer de mettre un champ timestamp plutot dans ma bdd, avec un current_timestamp par defaut, pas d'erreurs, mais il me laisse tout a 0 . ..


As tu aumoins vu ma modification sur $_POST['k1'] par rapport a l'original, entre :

'".$_POST['k1']."'
et
'$datetime'
ne vois tu pas une différence ? (je parle de la concaténation, soit les ".$datetime." et non plus $datetime.

phpdebutant.org > a droite fait les bases.

$datetime=current_timestamp
ou tu as chopé "current_timestamp" ? Ca n'existe pas, de plus, si c'est une fonction php ca sera écris toujours comme ceci :
$datetime=current_timestamp();

dans l'état actuel essai :
$datetime=time();

et corrige l'erreur $datetime ca devrait allez mieux.
sinon change ton type de table timestamp en date 0000-00-00 et : $datetime= date("Y-m-d");

je vais resté dans le simple ... :) 
C'est rare que je fasse un tel roman alors estime toi heureux :D  :D  :whistle:  :hello: 

En fait je fais un site pour ma team et j'ai fait une table pour chaque joueur, contenant : id, datetime, kills, deaths.
Chaque partie est dans une entrée de chaque table.
J'aimerais pouvoir faire des statistiques sur une semaine, sur un mois,et totales, du ratio kills/deaths. Comment dois-je m'y prendre ?
Mettre a jour les stats a chaque actualisation de la page en extrayant de ma bdd les infos dans des variables, et en travaillant dessus ?
Comment travailler avec des dates ?
Utiliser le id ?
Merci d'avance.

tu peux faire ca avec plusieurs requete sql,
une par type de stats:
exemple pour la semaine

  1. select idgame, sum(kills) as nb_kills, sum(deaths) as nb_deaths
  2. from abdel_bachir
  3. where datetime > now() - interval 1 week
  4. group by idgame
  5. ;


remarque: je pense pas que le nom de ta table soit approprié ;) 

Coca25 juste pour ma culture personnelle la synthaxe "- interval x y" dans une requete SQL est vraiment reconnu par MySQL ? Rassure moi c'est juste un exemple, ne me dis pas que je me fais ch*er depuis des années a calculer la date en PHP (bon enfin y'a pire dans la vie)...

Citation :

Depuis MySQL 3.23, INTERVAL expr type est autorisé des deux cotés de l'opérateur + si l'expression de l'autre coté est de type DATE ou DATETIME. Pour l'opérateur -, INTERVAL expr type est autorisé uniquement du coté droit, car on ne peut pas soustraire une date d'un intervalle (voir les exemples ci-dessous).

http://dev.mysql.com/doc/refman/5.0/fr/date-and-time-fu...

Studientinu a dit :
je me fais ch*er depuis des années a calculer la date en PHP (bon enfin y'a pire dans la vie)...


rassure moi, ca fait pas des années que tu fais du php :p 

Encore une question : pourquoi il me renvoi 'Array' dans $avgratios ?

$requete=mysql_query("SELECT AVG(ratio) FROM abdel_bachir WHERE datetime > now() - interval 1 week GROUP BY idgame");


$nb_games=mysql_num_rows($requete);
$avgratios=mysql_fetch_array(mysql_query("SELECT AVG(ratio) FROM abdel_bachir WHERE datetime > now() - interval 1 week "));
echo "$nb_games";
echo "$avgratios";

Et j'ai essayé de faire :
$requete=mysql_query("SELECT ratio FROM abdel_bachir WHERE datetime > now() - interval 1 week GROUP BY idgame");

$nb_games=mysql_num_rows($requete);
echo"$nb_games";

while($row=mysql_fetch_row($requete))
{
echo"<BR>$row";

Mais pareil . . .

EDIT : et je ne comprends pas la fonction de group by , pouvez vous m'expliquer ?

ce que tu comprends pas aussi, c'est le fonctionnement de mysql_fetch_xxx et c'est pour ca que je t'ai indiqué un site de manuel php
tu tapes la fonction dans la zone recherche, tu arrives sur l'explication qui est agrémentée par plusieurs exemples

EDIT: pour le group by, c'est simple:
ex:
sortir la moyenne d'une classe
  1. select avg(note) from notes;

sortir la moyenne de chaque eleve d'une classe
  1. select eleve_id, avg(note) from notes group by elve_id;

ah ok, pour le group by, j'essayait de l'appliquer a mon cas, mais dans chaque table, aucun enregistrement n'a un champ qui peut des fois etre le meme, donc je comprenais pas.
et pour le mysql_fetch_array, je rajoute le MYSQL_ASSOC; et mon echo je le fais sur ce modele : echo $row['id'] . ': ' . $row['name'] . "\n";
C'est juse ça ?

ah, je viens de comprendre ta base ;) 
en fait la table, c'est le joueur (d'ou le ne nom de la table), et dedans chaque enregistrement, c'est une partie.
pas bon comme schéma de base.
si tu veux ajouter un joueur, tu vas te faire chier...

encore une question : pour mes ratios de performance, je fais le nb kills sur le nb deaths, il me faut donc au moins 3 chiffres apres la virgule.
Quelle type de variable me conseilles tu dans ma bdd ?
Double,float ?

EDIT : j'ai essayé double, mais quand je fais ma requete , il ne me renvoi que des entiers arondis dans mon tableau.
Et les valeurs sont des entiers dans ma bdd :/ 
INSERT INTO ne travaille peut etre qu'avec des entiers ? :/ 

julien41@idn a dit :
Ok merci mais je ne vais pas compliquer parce que j'veux juste arriver a un truc potable pour mon site, et les joueurs j'pourrai les rajouter facilement dans mon code et ma base.
En tout cas, merci pour ton aide !

plus facilement qu'avec mon schéma, je ne pense pas...

pour les entiers
donnes le code, parce que la j'ai du mal...
si tu n'as que des entiers dans la base, c'est normal qu'il ne te retournent que des entiers

$ratio1 = $_POST['k1'] / $_POST['d1'];

mysql_query("INSERT INTO abdel_bachir (idgame,datetime,kills,deaths,ratio) VALUES ('','".$dateperso."','".$_POST['k1']."','".$_POST['d1']."','".$ratio1."')" ) or die (mysql_error());

=> là je fais echo ratio1 et il me renvoi un bon decimal
mais je regarde dans ma bdd et je ne vois que des entiers, et quand je fais ma requete, il me renvoi des entiers.
A priori, c'est qu'il arrondi pour le passer dans la bdd mon ratio, non ?

O_o, je dis que je ne vois que des entiers dans ma base : c'est a dire que je peux voir que dans chaque enregistrement, le champ ratio est un entier, alors que je l'ai défini comme decimal ( j'ai essayé aussi float, et double)
Alors faut-il utiliser une autre requete mysql que INSERT INTO pour pouvoir enregistrer un réel ? Ou le probleme vient d'ailleurs ?

EDIT : Quand je fais echo ratio1, j'ai bien un décimal, donc le probleme viens forcement de l'enregistrement dans la base. Soit ça vient de la requete INSERT INTO, soit ça vient de la configuration ( type de variable ) du champ de ma base .
Je me trompes ?

au temps pour moi
par contre je vois pas, pour moi, la requete est bonne et decimal est bon
par contre ca depend comment tu déclares ton champs
ratio decimal (precision, echelle)
precision: le nombre de chiffre (ceux après la virgule sont compris dedans)
echelle: chiffres après la virgule

si tu l'as déclarée decimal(x), ca sera un entier avec x chiffres

J'ai un souci avec la moyenne AVG : $requete=mysql_query("SELECT AVG(ratio) FROM abdel_bachir WHERE datetime > now() - interval 1 week GROUP BY idgame");

$nb_games=mysql_num_rows($requete);
while($resultat=mysql_fetch_row($requete))
{
$moyenne=$resultat[0];
}
echo"$nb_games<BR>$moyenne";


Avec ça , je n'arrive pas a afficher la moyenne des ratios.
J'ai cherché mais je n'arrives pas a comprendre ce que me renvoie AVG, et donc comment le faire afficher.
Peux tu m'eclairer ?

EDIT : le code ci dessus affiche bien le bon nombre. Mais $moyenne me renvoi seulement le dernier ratio ...

Ah oui ok merci !
par contre , maintenant, j'ai la moyenne sur une semaine des ratios de chaque joueur, mais je n'ai aucune idée de la manière de m"y prendre pour les trier sans faire un code uzinagaz ^^.
Faire un tableau avec les champs moyenneRatio et nomDuJoueur; puis trier ce tableau pour enfin pouvoir l'afficher ?
Lassé par la pub ? Créez un compte
  • Contenus similaires :
Tags :
Tom's guide dans le monde