Se connecter avec
S'enregistrer | Connectez-vous

Pouquoi ma requete ne fonctionne pas?

Dernière réponse : dans Programmation

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

Lassé par la pub ? Créez un compte
Expert Programmation

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.

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.

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

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.

Expert Programmation

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..)

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

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
Expert Programmation

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...

;) 

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

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 ;

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),
Expert Programmation

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 ?

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.

Expert Programmation

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 ;) 

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

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";
Expert Programmation

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

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";
Expert Programmation

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.
Lassé par la pub ? Créez un compte
Tom's guide dans le monde