如何在连接表是一对多时创建SQL查询

问题描述:

我有一张候选人表和一张笔记表,每个候选人有多个笔记。如何在连接表是一对多时创建SQL查询

我试图运行一个SQL查询来获得一个特定的候选人的详细信息由他们的ID(candID)和备注匹配候选人。

我不太清楚如何做到这一点,因为会有很多笔记返回。我需要做两个单独的查询吗?

这里就是我这么远,但它是不完整的(坦率是候选的ID,candidateID是在说明表中的相关ID字段):

try { 
    $sql = 'SELECT Firstname, Lastname, candID, Email, note 
    FROM candidate RIGHT JOIN notes ON candID=candidateID WHERE candID='.$loadcandID.''; 
    $result = $pdo->query($sql); 
} 
catch (PDOException $e) { 
    $error = 'Error fetching candidate: ' . $e->getMessage(); 
    include $errorpage; 
    exit(); 
} 
$row = $result->fetch(); 
    $cand = array(

     'firstname' => $row['Firstname'], 
     'lastname' => $row['Lastname'], 
     'email' => $row['Email'], 

    ); 
+0

单个JOIN查询就足以得到你想要的。你可以设置一个[SQL小提琴](http://sqlfiddle.com/)?我们可以帮助您查询。 – 2014-10-01 20:27:41

+0

我从来没有使用SQL小提琴,我可能不得不打开另一个关于如何使用它的问题! – dlofrodloh 2014-10-01 20:36:23

+0

:)这是相当不言自明的,并有良好的文档。 – 2014-10-01 20:41:04

要做到JOIN正常,你有在查询中具体 -

SELECT `candidate`.`Firstname` AS `first`, `candidate`.`Lastname` AS `last`, `candidate`.`candID` AS `id`, `candidate`.`Email` AS `email`, `notes`.`note` AS `note` 
FROM `candidate` 
LEFT JOIN `notes` 
ON `candidate`.`candID` = `notes`.`candidateID` 
WHERE `candID` = '1' 
+0

谢谢,那么如何处理结果中有很多笔记,但只有一个名字,姓氏等?我目前使用$ row = $ result-> fetch(); – dlofrodloh 2014-10-01 20:34:28

+0

使用'$ row = $ result-> fetch(PDO :: FETCH_ASSOC)'并进行我添加的更改,即AS语句。例如,你会在'$ row ['first']''$ row ['note']''等中看到名字。 – 2014-10-01 20:38:13

+0

啊,完美谢谢 – dlofrodloh 2014-10-01 20:55:41