Forum TourDeJeu · Règles du forum | Aide Recherche Membres |
Bienvenue invité ( Connexion | Inscription ) | Recevoir à nouveau l'email de validation |
Sinclair |
Ecrit le : Mardi 14 Décembre 2004 à 23h26
|
Pro Groupe : Membre Messages : 133 |
Salut !
C'est un petit soucis que je contourne avec une astuce mais qui montre ses limites. Pour l'exemple, nous avons une table de noms : TBL_NOM (id_nom, nom) et une table de personnages : TBL_PERSO (id_perso, id_partie, id_nom) Le problème commence pour selectionner un nom qui n'est pas déja utilisé par un personnage. Comme NOT IN et EXCEPT ne sont pas permis (si j'ai bien compris), ca pause probleme. Le truc consiste à écrire : SELECT nom FROM tbl_nom LEFT JOIN tbl_perso ON tbl_nom.id_nom=tbl_perso.id_nom WHERE id_perso IS NULL Jusqu'a maintenant, cette astuce me permettait de contourner le problème. Mais maintenant, je cherche un nom qui n'est pas utilisé dans la partie 1(id_partie=1) et là, mon truc ne marche plus Est-ce que quelqu'un s'est confronté au même problème ? -------------------- Concepteur/Développeur de guildes.jpc.free.fr
|
Sybler |
Ecrit le : Mercredi 15 Décembre 2004 à 02h37
|
Ouf Groupe : Membre Messages : 453 |
Personnellement, j'utilise cette facon pour m'assurrer disons qu'un nom de personnage n'est pas déjà présent:
$new_perso = "brun"; TBL_USER (id, nom) TBL_PERSO (id, partie, nom) $query = "SELECT count(nom) FROM tbl_perso WHERE nom='$new_perso';"; $result = mysql_query($query); $row = mysql_fetch_row($result); if ($row[0] == 0) { die("perso déjà utilisé"); } - ou - $query = "SELECT id FROM tbl_perso WHERE nom='$new_perso';"; $result = mysql_query($query); if (@mysql_num_rows($result)==1) { die("perso déjà utilisé"); } Voilà, je sais que je répond pas directement à ta question, mais j'espere que ses solution aiderons quelques personnes... et peut etre meme que j'apprendrais comment faire encore mieux -------------------- |
gorgu |
Ecrit le : Mercredi 15 Décembre 2004 à 04h28
|
Ouf Groupe : Membre Messages : 417 |
$query = "SELECT count(nom) FROM tbl_perso WHERE nom='$new_perso';";
$result = mysql_query($query); $row = mysql_fetch_row($result); if ($row[0] > 0) { die("perso déjà utilisé"); } et pas == et penser a faire une déconnection base de données avant le die -------------------- |
Haiken |
Ecrit le : Mercredi 15 Décembre 2004 à 12h37
|
Ouf Groupe : Membre Messages : 360 |
Je propose :
SELECT nom FROM tbl_nom LEFT JOIN tbl_perso ON tbl_nom.id_nom=tbl_perso.id_nom and tbl_perso.id_partie=1 WHERE id_perso IS NULL PS : les subselects (IN, NOT IN, ANY...) sont supportés depuis MySQL 4.1 qui est passé en version stable depuis peu, et qui va donc se généraliser chez tous les hébergeurs -------------------- Association Nainwak, aide & hébergement des jeux web
Le Blog de l'assoc', encore mieux que l'assoc' tomate ! |
Guest |
Ecrit le : Mercredi 15 Décembre 2004 à 16h03
|
||
Unregistered |
En v'la une bonne nouvelle ! Pas que ça serve tous les jours, mais c'est tout de meme utile de pouvoir faire des selects imbriqués ! |
||
|
Nonothehobbit |
Ecrit le : Mercredi 15 Décembre 2004 à 17h15
|
Alien Groupe : Moderateurs Messages : 1298 |
Faîtes quand même des tests de performance avant de vous réjouir. C'est pas forcément la meilleure solution.
-------------------- |
gladiator |
Ecrit le : Mercredi 15 Décembre 2004 à 18h00
|
Pro Groupe : Membre Messages : 124 |
Tu as d'autre solution a nous proposer ?
-------------------- Futur Webmaster de : Fantastic Adventure
Toujours en creation pour une periode de quelques semaines ... Les idees ont ete concue et faites , les regles ont ete preparer , juste maintenant le codage qui sera un peu plus long que prevue ... |
Grouik |
Ecrit le : Mercredi 15 Décembre 2004 à 22h18
|
Unregistered |
Et simplement (non testé) :
SELECT COUNT(*) FROM TBL_NOM N, TBL_PERSO P WHERE N.nom = '$nom' AND N.id_nom = P.id_nom AND P.id_partie = $partie Le résultat = le nombre de fois ou un $nom et utilisé dans une $partie. Sinon même remarque que Nonothehobbit pour l'utilisation de [NOT] IN ou ANY... |
|
Sinclair |
Ecrit le : Jeudi 16 Décembre 2004 à 11h40
|
||
Pro Groupe : Membre Messages : 133 |
Cool ! Mais après un phpinfo je vois : Client API version 4.0.22 ... j'ai peur que free ne soit pas encore passé à la 4.1 Bon sinon, je n'ai pas encore testé tout ça ... mais je suis sur que ça va marcher grace à votre aide ! Merci les gars -------------------- Concepteur/Développeur de guildes.jpc.free.fr
|
||
askywhale |
Ecrit le : Jeudi 16 Décembre 2004 à 14h49
|
Pro Groupe : Membre Messages : 170 |
théoriquement on fait tout avec des bonnes vieilles jointures . Et ça marche sur tout les mysql.
-------------------- |
Sinclair |
Ecrit le : Jeudi 16 Décembre 2004 à 20h01
|
||
Pro Groupe : Membre Messages : 133 |
ok nikel, ça marche !
Merci Haiken ! ... et aussi les autes pour m'avoir aidé ! .. je retourne dans mon code -------------------- Concepteur/Développeur de guildes.jpc.free.fr
|
||