从mysql JOIN获取所有结果,即使没有连接匹配

时间:2016-04-21 01:23:53

标签: php mysql join

我在表和它自己之间进行JOIN操作。表模式类似于:

| id | name | parent |
|  0 | .... |   ...  |
|  1 | .... |   ...  |
|  2 | .... |   ...  |

查询如下:

$qMarks = str_repeat('?,', count($arr) - 1) . '?';
$stmt = $db->prepare("SELECT t1.id AS t1id, t1.name AS t1name, t2.name AS t2name 
                            FROM cats t1 
                            JOIN cats t2 ON t1.parent = t2.id
                            WHERE t1.name IN ($qMarks)");
$stmt->execute($arr);
$result = $stmt->fetchAll();

所以,我传递了一个名为$arr的数组,并且我找回了与参数数组中的一个项具有匹配名称的行。只要在id的某个地方还有匹配的parent,这种方式就可以了。

但是,有时parent的值将为空(空单元格)。只要满足t1.name IN ($qMarks)条件,我仍然希望得到这些结果。

如果表中的t1.parent值为空,我该如何返回值?

1 个答案:

答案 0 :(得分:1)

使用left join

$stmt = $db->prepare("SELECT t1.id AS t1id, t1.name AS t1name, t2.name AS t2name 
                        FROM cats t1 
                        LEFT JOIN cats t2 ON t1.parent = t2.id
                        WHERE t1.name IN ($qMarks)");