2011-07-18 4 views
0

Je suis relativement nouveau sur php et mysql et j'ai un problème avec une requête.Problème de requête MySQL

SELECT candidate_id.master_id, candidate_contact_details.first_name, 
candidate_contact_details.last_name, 
candidate_contact_details.home_phone FROM candidate_id, 
candidate_contact_details, qualifications WHERE qualifications.active = 'yes'; 

La base de données a seulement 2 dossiers sur les 5 tables mais cela revient 12 résultats dans les deux php et directement sur la console mysql. Je sais que je fais quelque chose de mal mais je n'arrive pas à le comprendre.

+0

il vous manque quelques conditions pour relier les 3 tables dans cette * raw * join – ascanio

+0

Pouvez-vous améliorer le titre de cette question? Nous savons que c'est "MySQL" parce que vous l'avez étiqueté comme tel, et si vous n'aviez pas de "Problème" alors vous ne seriez pas là. Choisissez un titre qui distingue cette question des autres. –

Répondre

0

vous devez rendre la requête cohérente. la requête que vous avez est le produit cartésien de toutes vos tables qui dans la plupart des cas ici ne fait pas beaucoup de sens

est quelque chose de mieux (en supposant que master_id est la référence à une instance de candidat):

SELECT candidate_id.master_id, candidate_contact_details.first_name, 
candidate_contact_details.last_name, 
candidate_contact_details.home_phone 
FROM candidate_id, candidate_contact_details, qualifications 
WHERE qualifications.active = 'yes' AND candidate_id.master_id = candidate_contact_details.master_id AND qualifications.master_id = candidate_id.master_id; 

serait encore mieux utiliser JOIN et utiliser alias pour nom de la table pour rendre le code plus lisible:

SELECT c.master_id, cc.first_name,cc.last_name,cc.home_phone 
FROM candidate_id c 
    JOIN candidate_contact_details cc 
    ON c.master_id = cc.master_id 
    JOIN qualifications q 
    ON c.master_id = q.master_id 
WHERE q.active = 'yes'; 
+0

en fait, votre première requête * est * une jointure (brute) .. :) – ascanio

+0

Merci à tous pour les réponses rapides et très utiles. J'ai l'idée maintenant :) –

0

Essayez cette

SELECT candidat_id.master_id, candidat_contact_details.first_name, candidat_contact_details.last_name, candidat_contact_details.home_phone FROM candidat_id, candidat_contact_details, qualifications WHERE qualifications.active = 'oui' et candidate_id.master_id = candidat_contact_details.master_id et candidat_id.master_id = qualification.master_id;

Assurez-vous que la colonne master_id existe dans toutes les tables et que son nom est correct. Comme l'a dit daniele, la requête doit être une jointure interne et non un produit cartésien dans le cas que vous avez décrit. Avez-vous déclaré des clés étrangères sur ces tables?

+0

oups. ressemble à daniele a également ajouté une requête SQL modifiée! – Parth

0

Vous avez besoin de savoir comment joindre des tables SQL. À moins que la requête spécifie comment les lignes d'une table correspondent aux lignes d'une autre table, la base de données joindra chaque ligne à toutes les autres lignes dans l'autre table.