MySql Left Join返回除第一个匹配行之外的所有匹配行

时间:2017-04-05 10:05:32

标签: mysql join

大家好我有这个问题表是:

      images: 

id || path_id  || name
1       1         example1.jpg
2       1         example2.jpg
3       1         example3.jpg
4       2         example4.jpg

      path:

id || folder_path
1      "./...."
2      "./...."

查询是这样的:

$query="SELECT images.name,path.folder_path FROM images 
        LEFT JOIN 
        path ON path.id=images.path_id 
        WHERE path.id=?";

让我们说?1。这将返回除匹配example1.jpg的第一张照片之外的所有照片。如果我将example2.jpg作为第一行,那么它将跳过example2.jpg,它会给我example1.jpg。为什么??我想要的是具有特定path_id +此特定id的folder_path的所有图片。 整个查询。

 $query="SELECT images.name,path.folder_path FROM images 
        LEFT JOIN 
        path ON path.id=images.path_id 
        WHERE path.id=?";
        if($stmt= $mysqli->prepare($query))
        {
                for($i=0;$i<count($result);$i++)
                {
                    $bind_param= $result[$i];
                    /*bind parameters*/
                    $stmt->bind_param("s",$bind_param);
                    /* execute query */
                    $stmt->execute();

                    /* bind result variables */
                    $stmt->bind_result($images,$path); 
                    $stmt->fetch();
                }
                $i=0;
               while($stmt->fetch()){
                    printf("%d) %s PATH:%s \n",$i,$images,$path);
                    $i++;
               }
                $stmt->close();.

$ result是id = 1。当我尝试printf数据时,它只打印我期望的3个图像中的2个和正确的folder_path。

1 个答案:

答案 0 :(得分:0)

问题是循环中的这一行,我昨天试过,我今天没有看到它在那里。

for($i=0;$i<count($result);$i++){
....
....
$stmt->fetch(); /* <--- Problem */
}

正如纪录片所说&#34;请注意,在调用mysqli_stmt_fetch()&#34;之前,所有列必须由应用程序绑定。 这意味着我将在循环完成后获取数据而不是同时获取数据。