TourDeJeu, le réseau des jeux en ligne alternatifs : jeux web multijoueurs, jeux par forum. En savoir +

Flux RSS des discussions du forum : pour les joueurs, et pour les créateurs et MJ
  Reply to this topicStart new topicStart Poll

> Mysql: Association Entre 2 Tables En Une Seule Req, ... requete ;p
Sybler
Ecrit le : Mercredi 15 Décembre 2004 à 02h28
Quote Post


Ouf
*

Groupe : Membre
Messages : 453


Bon, mon probleme est simple, mais demande un peu de mise en contexte:

--> j'ai deux tables, une table d'utilisateurs et une table de perso disons.

table session (id, status, user);
table perso (id, user, nom_perso);

Bon, évidament, je met juste les champs requis pour l'exemple, donc me dite pas de mettre un champs de plus dans session ... ou un truc du genre:

----
Donc, mon but est de savoir quel est l'id de session à partir uniquement du mon de perso, ou de l'id...

Présentement, je fais ceci (ca marche, mais je veux savoir comment l'optimiser)
$query = "SELECT user FROM perso WHERE nom_perso='$current_perso';";
$result = mysql_query($query);
$row = mysql_fetch_row($result);

$query = "SELECT id FROM session WHERE user='" . $row[0] . "';";
$result = mysql_query($query);
$row = mysql_fetch_row($result);

$session_id = $row[0];


.... wow, c'est long....
donc je voulais savoir quel était la requete qui permetterais de racourcir tout ca.
genre (ca je pense pas que ca marche):
$query = "SELECT id FROM session WHERE user=(perso.user:perso.nom_perso=$current_perso));";

Bon... z'avez une idée ? car présentement, c'est ma GROSSE faiblesse... et ca génère souvent beaucoup de code pour rien...


--------------------
user posted image
PMEmail PosterUsers Website
Top
gorgu
Ecrit le : Mercredi 15 Décembre 2004 à 04h24
Quote Post


Ouf
*

Groupe : Membre
Messages : 417


$query = "SELECT session.id FROM perso,session WHERE perso.nom_perso='$current_perso' and session.user=perso.user;";


--------------------
enfin je crois ...
Adept JDR
PMEmail PosterUsers Website
Top
xaero
Ecrit le : Mercredi 15 Décembre 2004 à 15h41
Quote Post


Ouf
*

Groupe : Membre
Messages : 593


sinon tu peux faire aussi un union all entre les deux requetes :

requete1 union all requete2

tout dépends de ta version de mysql il me semble.


--------------------
PMEmail PosterUsers WebsiteICQ
Top
Magauss
Ecrit le : Mercredi 15 Décembre 2004 à 15h55
Quote Post


Kid
*

Groupe : Membre
Messages : 12


Ou bien encore un LEFT JOIN :

SELECT session.id FROM perso LEFT JOIN session ON perso.user = session.user WHERE perso.nom_perso='$current_perso';
PMEmail Poster
Top
Grouik
Ecrit le : Mercredi 15 Décembre 2004 à 22h25
Quote Post


Unregistered






LEFT / RIGHT JOIN, UNION [ALL]... bande de psychopathes, va w00t.gif

Une jointure tout ce qu'il y a de traditionnel fera parfaitement l'affaire (gorgu version).

Maman, j'ai peur blink.gif
Top
Sinclair
  Ecrit le : Jeudi 16 Décembre 2004 à 11h53
Quote Post


Pro
*

Groupe : Membre
Messages : 133


QUOTE (Grouik @ 15 Dec 2004, 22:25 )
LEFT / RIGHT JOIN, UNION [ALL]... bande de psychopathes, va w00t.gif

Justement !

Y'a t'il une différence entre une jointure "classique" (where tbl1.id=tbl2.id)
et une jointure avec left join ?


--------------------
Concepteur/Développeur de guildes.jpc.free.fr
PM
Top
Magauss
Ecrit le : Jeudi 16 Décembre 2004 à 12h38
Quote Post


Kid
*

Groupe : Membre
Messages : 12


QUOTE (Sinclair @ 16 Dec 2004, 11:53 )
QUOTE (Grouik @ 15 Dec 2004, 22:25 )
LEFT / RIGHT JOIN, UNION [ALL]... bande de psychopathes, va  w00t.gif

Justement !

Y'a t'il une différence entre une jointure "classique" (where tbl1.id=tbl2.id)
et une jointure avec left join ?

Sur cette requete:

$query = "SELECT session.id FROM perso,session WHERE perso.nom_perso='$current_perso' and session.user=perso.user;";

Si l'utilisateur n'a pas de session, le résultat sera vide

sur cette requête:

SELECT session.id FROM perso LEFT JOIN session ON perso.user = session.user WHERE perso.nom_perso='$current_perso';

Si l'utilisateur n'a pas de session, le résultat sera NULL (une ligne avec un id de session à NULL)

Pour l'UNION, je ne vois pas comment obtenir un résultat satisfaisant en l'utilisant (puisque le but de la manoeuvre semble être d'obtenir une intersection entre deux tables)
PMEmail Poster
Top
gorgu
Ecrit le : Jeudi 16 Décembre 2004 à 15h29
Quote Post


Ouf
*

Groupe : Membre
Messages : 417


les join sont trés trés pratiques lorqsu'il y a plus d'une ligne en sortie car elles permettent de jouer sans trop trop de soucis avec les lignes n'ayant pas de correspondance (vu qu'elle retournent null)

Mais il faut bien testé son truc les premiers coups et lire pas mal d'exemples (suffit de faire un google) pour comprendre comment cela marche. ( left ou right that is the question tongue.gif)



--------------------
enfin je crois ...
Adept JDR
PMEmail PosterUsers Website
Top
Sinclair
Ecrit le : Jeudi 16 Décembre 2004 à 16h35
Quote Post


Pro
*

Groupe : Membre
Messages : 133


ok ... merci pour l'info ...

Pour l'instant, les jointure traditionnelles ne vont trés bien je vais continuer comme ça laugh.gif


--------------------
Concepteur/Développeur de guildes.jpc.free.fr
PM
Top
« Sujets + anciens | Programmer | Sujets + récents »

Reply to this topicStart new topicStart Poll