php - 显示多连接查询的结果

标签 php mysql sql

我有一个 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_maptags2 之间存在关系的记录,请使用 INNER JOIN

此处演示 - http://sqlize.com/UL1M80DT0c

关于php - 显示多连接查询的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7883824/

相关文章:

php - PDO 查询字符串

php - 如何在印度标准时间中插入日期时间并在检索格式日期时间后仅在 php 中插入日期时间?

mysql - 使用 Scala 解析 AWS Glue 中的 MySQL 0000-00-00 日期格式

sql - 几天之间的MySQL时间

php - ffmpeg 从视频错误中获取图像或缩略图

php - CSS 属性未显示为使用 PHP 的事件导航元素

php - 包括远程 HTML 文件

php - 通过 PHP 从 SQL 表到 JSON

mysql - 无法在 mysqli 中选择包含多个值的行

用于检索具有所需列值的单行数据的 SQL 查询