Trier par WHERE avec une variable

benji86446 Messages postés 40 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 20 novembre 2008 - 2 mars 2005 à 14:26
benji86446 Messages postés 40 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 20 novembre 2008 - 4 mars 2005 à 13:07
Bonjour tout le monde!

Voila, j'ai une petite question à propos des requetes SQL. J'aimerais trier les résultats lus sur une table par rapport aux résultats d'une autre table.
Je m'explique:

Je souhaites dans un premier temps lire des données sur une table

$sql = "SELECT id FROM table1";
$result = $db->sql_query($sql);
while (list($id)=mysql_fetch_array($result)){}

Maintenant, j'aimerais afficher toutes les information d'une seconde table ayant leur id égal à $id (ci dessus). Voila ce que j'ai essayé:

$sql = "SELECT id2 FROM table2 WHERE id2=$id";
$result = $db->sql_query($sql);
while (list($id2)=mysql_fetch_array($result)){}

Sauf que ça ce marche pas. Comment faire?

Merci d'avance pour toutes réponses

Benji

15 réponses

davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
2 mars 2005 à 14:45
salut.

plusieurs choses:

1 - pourrais tu essayer de nous dire quelle est l'erreur?

parce que "ça marche pas", c'est trop binaire ;)

2 - tu peux faire des requetes sur plusieurs table en meme temps :



"select t1.id, t2.id2 FROM table1 t1, table2 t2 WHERE t1.id=t2.id2"






-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
0
benji86446 Messages postés 40 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 20 novembre 2008
2 mars 2005 à 16:28
Oups désolé pour le message d'erreur (moi qui d'habitude suis le premier à raler quand on ne précise pas la message qui s'affiche quand il y en a un ^^). Le voici:

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/web43/html/kidlogis.com/modules/Live/index.php on line 50

Pour les requêtes sur plusieurs tables en même temps j'ai le même message d'erreur. Au lieu de vous donner un exemple comme je l'ai fait, je vais vous donner mon vrai code (il s'agit du code d'un live texte pour un match de foot):

$sql = "SELECT idmatch, equipe1, score1, equipe2, score2 FROM nuke_live_match order by `idmatch` desc limit 1";
$result = $db->sql_query($sql);
while (list($idmatch, $equipe1, $score1, $equipe2, $score2)=mysql_fetch_array($result)){}

$sql = "SELECT idcom, nummatch, numminute, commentaire1, commentaire2, commentaire FROM nuke_live_access WHERE nummatch=$idmatch order by 'idcom' desc";
$result = $db->sql_query($sql);
while (list($idcom, $nummatch, $numminute, $commentaire1, $commentaire2, $commentaire)=mysql_fetch_array($result)){}

Comme vous pouvez le voir, j'essaye pour la premiere table d'afficher la derniere entrée uniquement (chaque entrée identifiée par idmatch) et dans la deuxieme table, j'essaye donc d'afficher tous les commentaires dont le numero du match (nummatch) est égal à l'idmatch de la premiere table.

Merci
0
davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
2 mars 2005 à 16:57
re !

alors.. une solution tres simple de debuguage !

ajoute " or die(mysql_error())" apres ton sql query.

tu as un probleme avec ta requete, le mysql_error() va te sortir ton erreur ;)
-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
0
benji86446 Messages postés 40 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 20 novembre 2008
2 mars 2005 à 17:13
Bon, j'ai modifié mon code par

$sql = "SELECT idcom, nummatch, numminute, commentaire1, commentaire2, commentaire FROM nuke_live_access WHERE nummatch=$idmatch order by 'idcom' desc";
$result = $db->sql_query($sql) or die(mysql_error());
while (list($idcom, $nummatch, $numminute, $commentaire1, $commentaire2, $commentaire)=mysql_fetch_array($result)){}

Et voila le message que j'obtiens:

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 'order by 'idcom' desc' at line 1
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
benji86446 Messages postés 40 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 20 novembre 2008
2 mars 2005 à 17:16
Autre chose, lorsque je supprime le "WHERE nummatch=$idmatch" de la requete, le script marche, seulement j'ai les commentaires de tous les matchs qui s'affichent à la suite, et non pas seulement ceux du dernier match enregistré
0
tucsoufle Messages postés 1250 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 30 septembre 2007 1
2 mars 2005 à 18:09
salut

essai de changer ta requete par celle ici :

$sql = "SELECT idcom, nummatch,
numminute, commentaire1, commentaire2, commentaire FROM
nuke_live_access WHERE nummatch=".$idmatch." order by 'idcom' desc";

c'est peut etre un probleme de concatenation !

autrement, verifie le nom de tout tes champs

Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Mon site Internet
0
benji86446 Messages postés 40 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 20 novembre 2008
2 mars 2005 à 18:28
j'ai toujours le même message d'erreur. Pour ce qui est des noms des champs, ils doivent etre bons etant donné que dès que j'enleve WHERE nummatch=idmatch tout marche (même si j'ai tous les commentaires qui s'affichent et non plus ceux que je veux uniquement. Sinon si on fais la requete des deux tables en une fois, vous le coderiez comment? Parce qu'il est possible que je me sois trompé, j'avais mis

$sql = "SELECT t1.idmatch, t2.idcom, t2.nummatch, t2.numminute, t2.commentaire1, t2.commentaire2, commentaire FROM nuke_live_match t1, nuke_live_access t2 WHERE t2.nummatch=t1.idmatch order by 't2.idcom' desc";
$result = $db->sql_query($sql) or die(mysql_error());
while (list($idmatch, $idcom, $nummatch, $numminute, $commentaire1, $commentaire2, $commentaire)=mysql_fetch_array($result)){}
0
tucsoufle Messages postés 1250 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 30 septembre 2007 1
2 mars 2005 à 19:48
donne nous le code sql de ta table !

et rajoute des ' comme ca : WHERE nummatch='".$idmatch."' order


ca doit pas etre ça mais bon...


Je te donne une idée, tu me donnes une idée, nous avons chacun deux idées.
Mon site Internet
0
benji86446 Messages postés 40 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 20 novembre 2008
2 mars 2005 à 20:42
Je vous passe carement le script pour la créer (comme ça il me suffit de faire un exporter pour l'avoir ^^)

CREATE TABLE `nuke_live_match` (
`idmatch` tinyint(4) NOT NULL auto_increment,
`equipe1` varchar(50) NOT NULL default '',
`score1` char(2) NOT NULL default '',
`equipe2` varchar(50) NOT NULL default '',
`score2` char(2) NOT NULL default '',
PRIMARY KEY (`idmatch`)
) TYPE=MyISAM AUTO_INCREMENT=3 ;

CREATE TABLE `nuke_live_access` (
`idcom` tinyint(4) NOT NULL auto_increment,
`nummatch` tinyint(4) NOT NULL default '0',
`numminute` varchar(6) default NULL,
`commentaire1` varchar(255) default NULL,
`commentaire2` varchar(255) default NULL,
`commentaire` varchar(255) default NULL,
PRIMARY KEY (`idcom`)
) TYPE=MyISAM AUTO_INCREMENT=17 ;
0
davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
2 mars 2005 à 22:50
salut !

à priori je dirai qu'il y a 95 % de chance que le probleme viennent de ton $idmatch (qui à mon avis n'est pas défini).

pour en etre sur .. fais un echo de ta requete.

;)
-------------------------------------
Les ordinateurs, plus on s'en sert moins, moins ça a de chance de mal marcher. [Les Shadoks]
0
benji86446 Messages postés 40 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 20 novembre 2008
2 mars 2005 à 23:21
lorsque je fais un echo de l'idmatch, je tombe sur la valeur "2" et lorsque je fais un echo du nummatch d'un commentaire correspondant au match en question, je tombe également sur la valeur "2"
0
benji86446 Messages postés 40 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 20 novembre 2008
2 mars 2005 à 23:42
Non en fait, je crois que tu as raison, j'ai essayé de creer deux matchs avec un comentaire pour chaque match, avec dans l'echo la valeur de nummatch et de idmatch et voila ce qui s'affiche à mon écran:


Essai match 1 Nummatch= 2 et idmatch= 2

Essai match 2 Nummatch= 3 et idmatch= 3
C'est à dire que les commentaires sont bien identifiés par rapport à leur match(sachant que j'avais créé deja deux matchs, identifiés par 0 et 1, que j'ai ensuite effacé, ce qui crée le décalage actuel du match 1 d'id 2). Donc les identifiants du match sont bien en place, maintenant ce qu'il faut faire c'est arriver à n'afficher que les commentaires du dernier match enregistré.
Dans le futur, je créerai également la possibilité d'acceder aux archives, c'est à dire d'acceder aux commentaires suivant le match séléctionné, mais je pense qu'une fois le live pour le dernier match sera en place, le script sera quasi le même pour les archives
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
3 mars 2005 à 00:38
Salut,



nummatch='$idmatch' devrait
fonctionner dans ta requête comme l'a dit tucsoufle dans son deuxième
commenataire, sauf si le champ idmatch est de type INT ou SMALLINT
(bref numérique, ce qui serait préférable pour les perfs)



a +


<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0
benji86446 Messages postés 40 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 20 novembre 2008
4 mars 2005 à 13:06
Salut tout le monde!

J'ai résolu mon problème! Ca venait bien d'idmatch qui était mal défini! J'ai fait une erreur de débutant en mettant le } trop tot, ce qui faisait qu'idmatch n'etait plus défini pour la deuxieme requete
En tout cas, merci à tous pour vous être penchés sur mon problème
0
benji86446 Messages postés 40 Date d'inscription vendredi 23 mai 2003 Statut Membre Dernière intervention 20 novembre 2008
4 mars 2005 à 13:07
Salut tout le monde!

J'ai résolu mon problème! Ca venait bien d'idmatch qui était mal défini! J'ai fait une erreur de débutant en mettant le } trop tot, ce qui faisait qu'idmatch n'etait plus défini pour la deuxieme requete
En tout cas, merci à tous pour vous être penchés sur mon problème
0
Rejoignez-nous