2013-10-10 4 views
-2

Le tableau users comprend les colonnes first, last et company.Requête pour fusionner deux tables en fonction de certains critères

Le tableau columns contient 5 colonnes contenant des informations différentes et une colonne company.

Je me demandais s'il y a un moyen de sélectionner users enregistrement en fonction des critères ci-dessous et sélectionnez la ligne dans le tableau columns qui contient le même nom de la société comme il comapany colonne dans la table users?

J'apprécie toutes les suggestions

Quelque chose comme:

$st = $this->db->prepare("SELECT * FROM `users`,`columns` WHERE `first`=? AND `last`=? AND `users.company` = `columns.company`"); 
+1

@Mihai Ce n'est pas un commentaire très constructif. Et juste pour que vous le sachiez, OP utilise un 'JOIN' implicite. – Kermit

Répondre

1

Si l'on suppose que les entreprises sont uniques, vous pouvez utiliser un LEFT JOIN:

SELECT [column list] 
FROM `users` u 
LEFT JOIN `columns` c 
    ON c.`company` = u.`company` 
WHERE u.`first` = ? 
    AND u.`last` = ? 
+0

Merci beaucoup. Donc, comment cela fonctionne, je sélectionne 'users' comme table' u' en le combinant avec 'columns' table' c', et basé sur la colonne 'company', cela construit un ensemble de résultats, puis je viens d'utiliser WHERE pour affiner les rangées? Aussi, pourquoi ne pas utiliser quelque chose comme simplement JOIN ou INNER JOIN? Pourquoi utilisons-nous LEFT rejoindre dans cette instance? – AnchovyLegend

+1

Un «LEFT JOIN» est utilisé lorsqu'il n'y a pas de société pour un utilisateur particulier. Vous pouvez essayer d'utiliser un 'JOIN' et voir comment cela affecte votre jeu de résultats. Sinon, vous avez raison sur comment cela fonctionne. – Kermit

+0

Merci pour la réponse. Il n'y aura jamais d'instance où le champ de l'entreprise sera vide. Dois-je simplement utiliser «JOIN» dans ce cas? – AnchovyLegend

Questions connexes