Se connecter / S'enregistrer
Votre question

Pouquoi ma requete ne fonctionne pas?

Tags :
  • concours
  • Programmation
Dernière réponse : dans Programmation
11 Mars 2010 22:26:02

Bonjour.

J'éssaye de selectionner dans un tableau les 5 membres ayant le plus de pièces d'or a un jeu, mais la requete ci-dessous ne fontionne pas ?

Pouvez-vous me dire pourquoi s'il vous plait?

$date1=RemakeDate(-0);
$date2=RemakeDate(-1);
$regHistoGain = "SELECT * FROM log_concours_pieces_or where date='$date2' and nomJeux>='$ticket_concours_pieces_or' and SUN (nbPieces_or)<>0 ORDER BY SUN (nbPieces_or) DESC, id LIMIT 0,5";

J'ai éssayé plusieurs requetes mais là...

Autres pages sur : pouquoi requete fonctionne

11 Mars 2010 23:57:08

Salut,

Rajoute à la fin de ta requête: or die(mysql_error())

Et regarde l'erreur qu'il te renvoi.
Un conseil au lieu de balancé tous ça directement fait morceau par morceau et tu verras l'erreur par toi même.
m
0
l
12 Mars 2010 00:10:16

Voilà ce que ça me dis:

FUNCTION monsite.SUN does not exist


Je précise que j'ai remplacé le nom de mon site par monsite
m
0
l
Contenus similaires
12 Mars 2010 01:13:44

Ben y a pu personne?
m
0
l
12 Mars 2010 02:03:34

Bon tampis pour ce soir enfin cette nuit, j'ai attendu, personne n'est venu a mon secours erfffffffffffffff.

Merci pour les connaisseurs de mysql, j'ai pas mal de mal en ce moment pour mon site et je désespère car je ne vois pas beaucoup d'aide sur ce forum, j'ai l'impression de perdre mon temp.

A demain et bonne nuit a ceux qui ne sont pas encore couchés.
m
0
l
12 Mars 2010 04:22:50

bonjour,

ce ne serait pas plutôt SUM au lieu de SUN ?
m
0
l
12 Mars 2010 08:43:17

ouais c'est probablement SUM (la somme en anglais) a la place de SUN (le soleil...)

;) 
m
0
l
12 Mars 2010 09:25:09

ça, c'est à cause des pièces d'or...
m
0
l
12 Mars 2010 10:24:11

Bonjour.

Merci pour vos réponses mais j'ai mis ça:

$date1=RemakeDate(-0);
$date2=RemakeDate(-1);
$regHistoGain = "SELECT * FROM log_concours_pieces_or where date='$date2' and nomJeux>='$ticket_concours_pieces_or' and SUM (nbPieces_or)<>0 ORDER BY SUM (nbPieces_or) DESC, id LIMIT 0,5";
$exec = mysql_query ($regHistoGain) or die(mysql_error());

Et j'ai toujours ça en erreur:

FUNCTION monsite.SUM does not exist
m
0
l
12 Mars 2010 10:27:26

En faite, si je retire le SUM (), le tableau m'affiche les 5 joueurs qui ont fait le plus gros score au jeu des pièces d'or la veille.

Moi je cherche a ce que ma requete donne les 5 joueurs qui ont fait le plus gros total des pièces d'or la veille.
Donc c'est pour ça que j'ai mis SUM(), pour qu'elle calcule le total des pièces d'or gagné la veille par membre.

m
0
l
12 Mars 2010 10:33:14

globalement, un truc du genre :


SELECT SUM(nb_pieces_or), joueur.id joueur, joueur.nom_joueur FROM log_concours
INNER JOIN joueurs ON log_concours.id_joueur = joueur.id_joueur
WHERE
[ici ta clause where sur la date et le nom du jeu]
GROUP BY id_joueur, nom_joueur.


devait le faire (je pense..)
m
0
l
12 Mars 2010 11:07:23

Grrrrrrrrrr.

Je suis nul, j'ai fais ça et ça ne fonctionne pas:

$regHistoGain = "SELECT SUM(nb_pieces_or), joueur.id_joueur, joueur.nom_joueur FROM log_concours_pieces_or
INNER JOIN joueurs ON log_concours_pieces_or.id_joueur = joueur.id_joueur
WHERE [date='$date2' and nomJeux>='$ticket_concours_pieces_or']
GROUP BY id_joueur, nom_joueur. ";

Le message d'erreur est:

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 '[date='2010-03-11' and nomJeux>=''] GROUP BY id_joueur, nom_joueur.' at line 4


Je présume que c'est a cause de ce que j'ai mis dans la clause WHERE? Pourquoi?

Merci pour vos réponse, en même temp j'apprends mes erreurs
m
0
l
12 Mars 2010 11:39:29

enlève les crochets autour de ta condition :) 
m
0
l
12 Mars 2010 11:42:54

bien sur la table joueur existe (je l'ai mise au pif pour illustrer l'exemple..) ?
m
0
l
12 Mars 2010 11:58:40

il n'y aurai pas une requete plus simple? Car je suis perdu, je fais n'importe quoi car je ne comprends rien a la requete.

Voici ce que j'ai fais:

$regHistoGain = "SELECT SUM(nbPieces_or), info_membres.id, info_membres.username FROM log_concours_pieces_or
INNER JOIN info_membres ON log_concours_pieces_or.id = info_membres.id
WHERE date='$date2' and nomJeux>='$ticket_concours_pieces_or'
GROUP BY id, username. ";


Il y a une table infos-membres, mais aussi une table log_concours_pieces_or donc ne serait-il pas plus simple de faire la requete uniqmement en prenant les infos de la table log_concours_pieces_or ?

J'aimerai selectionner les 5 joueurs qui ont cumulé le plus de pièces d'or la veille.

J'ai ce message d'erreur en mettant la requete au-dessus:

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 '' at line 4
m
0
l
12 Mars 2010 12:03:00

Mets la structure de tes tables comme ceci :

TABLE
id
nom
prénom


TABLE2
id
cléétrangère_TABLE
nom
prénom


par exemple.

Et dit ce que tu veux exactement afficher, parce que là c'est un peu flou pour moi...

;) 
m
0
l
12 Mars 2010 12:09:23

log_concours_pieces_or.id c'est l'id de ton enregistrement dans la table log_concours_pieces_or ou bien c'est l'id utilisateur enregistré dans la même table ?

pour ton erreur, j'ai l'impression qu'une des 2 variables n'est pas renseignée... en tout cas c'est ce que m'inspire le message d'erreur
m
0
l
12 Mars 2010 12:14:22

Voilà ce sera plus simple, voici la structure de ma table:

CREATE TABLE IF NOT EXISTS `log_concours_pieces_or` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(20) NOT NULL default '',
`date` date NOT NULL default '0000-00-00',
`heure` time NOT NULL default '00:00:00',
`nomJeux` varchar(50) NOT NULL default '',
`IP` varchar(15) NOT NULL default '',
`nbPieces_or` int(11) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `username` (`username`),
KEY `date` (`nomJeux`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1390 ;
m
0
l
12 Mars 2010 12:15:42

Et voici ce que contient la table (pour éxemple)

INSERT INTO `log_concours_pieces_or` (`id`, `username`, `date`, `heure`, `nomJeux`, `IP`, `nbPieces_or`) VALUES
(1, 'Toto222', '2010-02-09', '15:26:38', 'ticket_concours_pieces_or', '93.16.234.106', 50),
m
0
l
12 Mars 2010 12:30:27

nomJeux>='$ticket_concours_pieces_or'


Une variable dans un champ texte c'est pas vraiment possible...
Et > pour un champ texte pas possible non plus.

Dans ta requête, ça veut dire quoi concrétement ?
Tu peux mettre = ou LIKE pour dire est égal à, ressemble à...


Ensuite pour sélectionner les 5 meilleurs, on admet qu'il peuvent jouer plusieurs fois par jour ?
Donc faire la SOMME avec SUM, un ORDER BY DESC et un LIMIT 0,5 pour les sélectionner, c'est bien ça ?
m
0
l
12 Mars 2010 12:35:18

Oui c'est bien ça simdu80.

Les joueurs ont plusieurs tickets_concours_pieces_or, qu'ils doivent gratter et de là, ils decouvrent le gain.

Donc je veux selectionner le total des gains de la veille et faire du plus gros au plus petits gains total de la veille.

Pour que dans le tableau, resorte les 5 meilleurs joueurs de la veille.

m
0
l
12 Mars 2010 12:44:14

ok !



$datehier = ;

$regHistoGain='SELECT SUM(nbPieces_or), id,username FROM log_concours_pieces_or
WHERE date='.$datehier.' and nomJeux="ticket_concours_pieces_or"
ORDER BY SUM(nbPieces_or)
GROUP BY id, username
LIMIT 0,5;'



Teste ceci et dit moi les erreur s'il y en a, et aussi, n'oublie pas de changer la date pour mettre celle d'hier. Une variable en PHP pour l'affecter ;) 

m
0
l
12 Mars 2010 12:51:15

Donc j'ai mis ceci:

$regHistoGain = "SELECT SUM(nbPieces_or), id,username FROM log_concours_pieces_or
WHERE date='.$date2.' and nomJeux='ticket_concours_pieces_or'
ORDER BY SUM(nbPieces_or)
GROUP BY id, username
LIMIT 0,5";


Et toujours un message d'erreur:

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 'GROUP BY id, username LIMIT 0,5' at line 4
m
0
l
12 Mars 2010 12:58:47

Enlève le group BY et le LIMIT pour l'instant...
m
0
l
12 Mars 2010 13:03:21

Donc j'ai fais ça, il n'y a plus de message d'erreur, mais plus non plus, de liste des membres d'hier.
Le tableau reste blanc, et pas de message d'erreur donc ça avance super.

$regHistoGain = "SELECT SUM(nbPieces_or), id,username FROM log_concours_pieces_or
WHERE date='.$date2.' and nomJeux='ticket_concours_pieces_or'
ORDER BY SUM(nbPieces_or)";
//GROUP BY id, username
//LIMIT 0,5";
m
0
l
12 Mars 2010 13:07:59

Oui on avance !

ça veut dire que t'as un soucis dans ton where.

fait un echo $date2 pour voir ce que ça retourne, et regarde si c'est bien ça dans ta BdD... ça doit être au format 0000-00-00...

Si c'est au bon format, test en enlevant le SUM() en laissant juste nbPieces_or.

On va y arriver ;) 

C'est dur sans pouvoir faire des test ^^'

Courrage
m
0
l
12 Mars 2010 13:17:33

Donc si je mets ça, le tableau n'affiche rien du tout et pas d'erreur :

$regHistoGain = "SELECT nbPieces_or, id,username FROM log_concours_pieces_or
WHERE date='.$date2.' and nomJeux='ticket_concours_pieces_or'
ORDER BY nbPieces_or";
//GROUP BY id, username
//LIMIT 0,5";

En revanche, si je mets ça (en retirant les . dans date, le tableau affiche la liste de touts les resultats gains et des pseudos des membres ayant gagné, par ordre du plus petit au plus grand, mais je n'ai pas les dates ni le nom du jeu dans le tavbleau

$regHistoGain = "SELECT nbPieces_or, id,username FROM log_concours_pieces_or
WHERE date='$date2' and nomJeux='ticket_concours_pieces_or'
ORDER BY nbPieces_or";
m
0
l
12 Mars 2010 13:18:22

Je ne sais plus comment on fait un écho sur mon fichier
m
0
l
12 Mars 2010 13:18:54

ajoute SUM à ta dernière requete + ORDER BY id, username


je suppose que c'est en PHP...

Donc simplement

echo $date2;

$regHistoGain = "";

quand tu lances la page ça t'affichera la variable $date2.
m
0
l
12 Mars 2010 13:34:49

Mp envoyé simdu80
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS