Voir les messages sans réponses | Voir les sujets actifs Nous sommes le 16 Avr 2024 13:34



Répondre au sujet  [ 4 messages ] 
 MySQL quelqu'un ?? 
Auteur Message
Barde
Avatar de l’utilisateur

Inscription: 14 Mar 2004 13:14
Messages: 71
Localisation: Paris
Répondre en citant le message
Message MySQL quelqu'un ??
J'ai 2 tables Tab_A et Tab_B avec un champ commun (appelons le champ_commun)
Je veux récuperer tous les enregistrements de Tab_B dont la valeur de champ_x (un champ de Tab_A) équivaut à un nombre "n".

J'essaie de faire ca avec une jointure :

SELECT * FROM 'Tab_B'
JOIN Tab_A ON ( Tab_A.champ_commun = Tab_B.champ_commun )
WHERE Tab_A.champ_x = n

Mais ca ne marche pas.
Comment faire ? :?


20 Déc 2004 19:43
Profil Site Internet
Long Distance Runner
Avatar de l’utilisateur

Inscription: 20 Avr 2004 10:27
Messages: 3529
Localisation: Paris
Répondre en citant le message
Message 
SELECT * FROM Tab_B, Tab_A WHERE Tab_A.champ_x = n AND Tab_A.champ_commun = Tab_B.champ_commun

J'avoue je ne connais pas (edit) la syntaxe MySQL pour (/edit) les jointures, mais faire ça, ça revient au même...

A noter:
Si tu crées un index sur le 'champ_commun' des deux tables, tu gagneras énormément de temps d'exécution, il en est de même pour l'ordre des conditions après le WHERE, faut commencer par les filtres les plus sélectifs (ici champ_x = n) pour terminer par les jointures...

Avec des identifiants du type Tab_BId et Tab_AId, ça serait beaucoup plus clair...
Surtout que là, on ne sait pas trop où tu en es pour la cardinalité des tes jointures...
Est-ce que pour un enregistrement de Tab_A, tu as plusieurs enregitresments de Tab_B?
L'inverse?
Ou alors tu dois pouvoir joindre plusieurs Tab_B à Tab_A et plusieurs Tab_A à Tab_B (dans ce cas là, il te faut une troisième table de relation entre Tab_A et Tab_B...


20 Déc 2004 19:51
Profil
Barde
Avatar de l’utilisateur

Inscription: 14 Mar 2004 13:14
Messages: 71
Localisation: Paris
Répondre en citant le message
Message 
L'inconvénient de cette méthode est que je dois préciser tous les champs de Tab_B dans le SELECT alors que je les veux tous (Là il me prendra tous les champs de Tab_A aussi). Heureusement il y en a peu.

Dans tous les cas, ca marche. Merci.


20 Déc 2004 20:05
Profil Site Internet
Long Distance Runner
Avatar de l’utilisateur

Inscription: 20 Avr 2004 10:27
Messages: 3529
Localisation: Paris
Répondre en citant le message
Message 
C'est toujours mieux en général de lister les champs que tu souhaites dans une requête, sinon si tu modifies ta table, et que par malheur les champs se décalent lors d'un SELECT *, l'erreur te sautera pas forcément à la figure et tu vas bien galérer pour comprendre ce qu'ils se passe :)

Sinon, pour les jointures, je pense qu'il faut déclarer les champs des jointures en tant que tel lorsque que tu crées ta table...(si tu ne l'a pas fait...)

Doit bien y avoir de la doc potable sur MySQL qui traine quelquepart je pense :)


20 Déc 2004 20:10
Profil
Afficher les messages postés depuis:  Trier par  
Répondre au sujet   [ 4 messages ] 

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 12 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages

Rechercher:
Aller à:  
cron
Powered by phpBB® Forum Software © phpBB Group
Designed by STSoftware for PTF.
Traduction par: phpBB-fr.com