从 mysql JOIN 获取所有结果,即使没有匹配的连接
Get all results from mysql JOIN, even if no join matches
我正在 table 和它自身之间进行 JOIN 操作。 table 架构类似于:
| 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
,然后我返回了与参数数组中的一项匹配的名称的行。这工作正常,只要在 parent
.
的某处也有匹配的 id
但是,有时 parent
的值将为空白(空单元格)。我还是想得到那些结果,只要满足 t1.name IN ($qMarks)
条件即可。
如何 return 值,即使 table 中的 t1.parent
值为空?
使用 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)");
我正在 table 和它自身之间进行 JOIN 操作。 table 架构类似于:
| 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
,然后我返回了与参数数组中的一项匹配的名称的行。这工作正常,只要在 parent
.
id
但是,有时 parent
的值将为空白(空单元格)。我还是想得到那些结果,只要满足 t1.name IN ($qMarks)
条件即可。
如何 return 值,即使 table 中的 t1.parent
值为空?
使用 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)");