我有一个 SQL 查询,它显示检索到的 2 行,但是当我回显字段 name
时,没有检索到任何内容。有人知道我做错了什么吗?
$sql = 'SELECT *
FROM tag_map
LEFT JOIN tags2 ON tags2.tag_id = tag_map.tag_id
LEFT JOIN video ON video.vid_id = tag_map.vid_id
WHERE tag_map.vid_id=?';
$stmt_tags = $conn->prepare($sql);
$result=$stmt_tags->execute(array($vid_id));
echo $tag_count=$stmt_tags->rowCount(); //shows 2
$tags = array();
while ($row = $stmt_tags->fetch(PDO::FETCH_ASSOC)) {
echo $row['name'];
}
编辑: Var_dump 使用建议的查询
SELECT tag_map.*, tags2.name AS tag_name
FROM tag_map
LEFT JOIN tags2 ON tags2.tag_id = tag_map.tag_id
LEFT JOIN video ON video.vid_id = tag_map.vid_id
WHERE tag_map.vid_id=?
array(4) { ["id"]=> string(4) "1234" ["vid_id"]=> string(32) "8364a8e463052e215a5dc174c92a2f18" ["tag_id"]=> string(32) "4c71a73d001dd9c09c7d9d95907bf1fe" ["tag_name"]=> NULL } array(4) { ["id"]=> string(3) "123" ["vid_id"]=> string(32) "8364a8e463052e215a5dc174c92a2f18" ["tag_id"]=> string(32) "57bb5dd83dc84e7115387886e328b04b" ["tag_name"]=> NULL }
最佳答案
您应该在 SELECT
子句中具体化,尤其是在连接其他表时。
例如
SELECT tag_map.vid_id, tag_map.name, tags2.name AS tag_name
请注意我如何使用 tags2.name
的别名来避免列名与 tag_map.name
冲突。
我只是在这里猜测,但我会说您的一个左联接表中有一个 name
列覆盖了 tag_map.name
。
更新
鉴于额外的信息,我不得不说这完全是由于您的左连接。 tags2.name
显示 NULL 的记录在 tag_map
中根本没有与相关 vid_id
相关的字段。
如果您只想显示 tag_map
和 tags2
之间存在关系的记录,请使用 INNER JOIN
此处演示 - http://sqlize.com/UL1M80DT0c
关于php - 显示多连接查询的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7883824/