Sous-requête avec MYSQL [Résolu]

bonjovi51 51 Messages postés vendredi 24 janvier 2003Date d'inscription 14 décembre 2006 Dernière intervention - 23 mai 2006 à 18:26 - Dernière réponse : bonjovi51 51 Messages postés vendredi 24 janvier 2003Date d'inscription 14 décembre 2006 Dernière intervention
- 24 mai 2006 à 14:59
Bonjour à toutes et à tous


Je voudrai svoir si MYSQL Supporte les sous requêtes. Si oui, j'aimerai bien voir où se trouve mon erreur.


Voilà, je vous montre ma sous requête.


$queryPseudo=mysql_query("select pseudo from cmjoueur where pseudo not exists (select pseudo from pronojoueur)");


Et voici l'erreur commune qui s'affiche :

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/userhtml/b/o/n/bonjovi51/3w/robot/verifauto.php on line 30


Merci pour tout

---------
le pastis est à consommer avec modération
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 24 mai 2006 à 14:45
3
Merci
Tu dois obtenir ceci :

$query=mysql_query("SELECT pseudo FROM cmjoueur WHERE pseudo NOT IN ('bonjovi','bonjovi2','bonjovi3',...,'bonjovi51')");

Mauvais quotes de ta part ;-) Ils doivent délimiter chaque valeur, puisque ce sont des chaînes, pas la liste elle-même.

Merci malalam 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de malalam
FhX 2368 Messages postés mercredi 13 octobre 2004Date d'inscription 18 avril 2015 Dernière intervention - 23 mai 2006 à 22:04
0
Merci
Depuis MySQL 4.2 je crois que ca marche.

Par contre, ca marche pas ce que tu veux faire !
SELECT
cmjoueur.pseudo
FROM cmjoueur, pronojoueur
WHERE NOT cmjoueur.pseudo = pronojoueur.pseudo

Et la, ca récupère tout :)

Tu peux faire la même chose avec une jointure explicite de type LEFT JOIN.
Commenter la réponse de FhX
bonjovi51 51 Messages postés vendredi 24 janvier 2003Date d'inscription 14 décembre 2006 Dernière intervention - 24 mai 2006 à 10:50
0
Merci
Je te remercie FhX pour ta réponse.

Sinon, je voudrai comparer les enregistrements dans deux tables. En fait, j'aimerai afficher le pseudo de la table cmjoueur qui n'est pas présent dans la table pronojoueur.

La requête "SELECT
cmjoueur.pseudo
FROM cmjoueur, pronojoueur
WHERE NOT cmjoueur.pseudo = pronojoueur.pseudo"

Que tu m'a filé ne correspond pas à mes attentes. Je pensais qu'un not exists marcherait, mais il n'en est rien. Savez quelle type de requête dois-je utiliser???

Merci, merci

---------
le pastis est à consommer avec modération
Commenter la réponse de bonjovi51
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 24 mai 2006 à 11:52
0
Merci
Hello,

Pourquoi ne correspond elle pas à tes attentes, au juste ?
Commenter la réponse de malalam
bonjovi51 51 Messages postés vendredi 24 janvier 2003Date d'inscription 14 décembre 2006 Dernière intervention - 24 mai 2006 à 12:05
0
Merci
Salut,

Je vais mieux exposer mon problème. Cette requête me servira à envoyer des mails à des joueurs qui n'ont pas encore pronostiqué leur match 2 jours avant le début du match.

Je cherche donc ses joueurs (dans la table cmjoueur) en faisant de cette manière :

La table pronojoueur enregistre les pronostics et leur pseudo pour plus simple. Donc, je veux regarder si les pseudos de la table cmjoueur existe dans la table pronojoueur. Si ils n'y apparaissent pas, je leur envoie un mail.

Bon, lorque j'ai utilisé cette requête (celle de FhX), il me renvoyait les joueurs ayant pronostiqué. Peut-être l'ai-je mal employé (sûrement même).

Je vais vous donner tout mon code pour vous donner un aperçu.



//Cette requête permet de récupérer tous les joueurs n'ayant pas encore pronostiqué.

$query=mysql_query("SELECT cmjoueur.pseudo FROM cmjoueur, pronojoueur WHERE NOT cmjoueur.pseudo = pronojoueur.pseudo");
while($val=mysql_fetch_array($query)) {
 echo $val["pseudo"]."
";
}

Pour vous donner une idée, il y a 2148 pronostics enregistrés dans la base. Bonjovi a pronostiqué 48 matches. Du coup, lorsque je lance ce script, Bonjovi apparaît 2100 fois à l'echo.

2148-48=2100

Comprenez vous mon problème

Merci, et j'espère avoir été assez clair
---------
le pastis est à consommer avec modération
Commenter la réponse de bonjovi51
malalam 10918 Messages postés lundi 24 février 2003Date d'inscription 2 mars 2010 Dernière intervention - 24 mai 2006 à 12:29
0
Merci
Hello,

ah ouais...
si tu ne peux pas faire de sous requêtes, fautr faire ça en 2 temps :
SELECT pseudo FROM pronojoueur

Tu stockes les pseudos dans un tableau.

Puis :
SELECT pseudo FROM cmjoueur WHERE pseudo NOT IN ('.implode (',', $aPseudos).')

en faisant gaffe aux apostrophes puisque ce sont des chaînes, tes pseudos (le mieux est sans doute de créer la liste des pseudos en dehors de la requête, mais j'avais la flemme).
Commenter la réponse de malalam
bonjovi51 51 Messages postés vendredi 24 janvier 2003Date d'inscription 14 décembre 2006 Dernière intervention - 24 mai 2006 à 12:31
0
Merci
Ok, je te remercie, j'essaie ça tout à l'heure, je vais manger...

---------
le pastis est à consommer avec modération
Commenter la réponse de bonjovi51
bonjovi51 51 Messages postés vendredi 24 janvier 2003Date d'inscription 14 décembre 2006 Dernière intervention - 24 mai 2006 à 14:38
0
Merci
Salut,

J'ai donc fait l'essai avec ce que tu m'as dit de faire Malalam. Le problème est que ma requête ne supporte pas ce genre de bidouuille.

$query=mysql_query("SELECT pseudo FROM cmjoueur WHERE pseudo NOT IN ('bonjovi,bonjovi2,bonjovi3,...,bonjovi51')");

Par contre cette requête

$query2=mysql_query("SELECT pseudo FROM cmjoueur WHERE pseudo NOT IN ('bonjovi')");

Marche parfaitement. C'est bête puisque j'étais près du but. J'ai regardé ma version de mysql. C'est la 4.0.18. Donc ne fonctionne pas avec les sous requêtes.

Merci quand même, je vais voir si il n'y a pas d'autres solutions et je vous la donne si je l'ai trouvée.

---------
le pastis est à consommer avec modération
Commenter la réponse de bonjovi51
bonjovi51 51 Messages postés vendredi 24 janvier 2003Date d'inscription 14 décembre 2006 Dernière intervention - 24 mai 2006 à 14:59
0
Merci
Merci Malalam,

Ca a marché. Pour ceux qui ça intéresse, je vais donner la solution que j'ai trouvé (enfin, euh...Malalam surtout). Putain de Mysql à la c..

//Cette requête permet de récupérer tous les joueurs de la table où ils sont tous stockés.
$tabPseudos=array();
$query=mysql_query("select distinct(pseudo) from pronojoueur");
while($val=mysql_fetch_array($query)) {
 $pseudos = "'".$val["pseudo"]."'";
 array_push($tabPseudos,$pseudos);
}



$index=1;


//A partir de la récupération de tous les joueurs, cette requête permet de récupérer tous les joueurs n'ayant pas du tout pronostiqué


$query2=mysql_query("SELECT pseudo FROM cmjoueur WHERE pseudo NOT IN (".implode (',',$tabPseudos).")");
while($val2=mysql_fetch_array($query2)) {
 echo $index.' - '.$val2["pseudo"]."
";;
 $index=$index+1;
}

Bye et à bientôt...


---------
le pastis est à consommer avec modération
Commenter la réponse de bonjovi51

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.