我在表和它自己之间进行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
值为空,我该如何返回值?
答案 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)");