2017-04-05 181 views
0

好家伙我有这个问题的表是:MySQL的左连接返回所有匹配的行除了第一个匹配行

 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。当我尝试打印数据时,它只打印我期望的3张图像中的2张和正确的folder_path。

+0

你能告诉我们你的预期产出吗? –

+0

我想:example1.jpg,example2.jpg,example3.jpg +“。/ ....”(id = 1) 我得到:example2.jpg,example3.jpg +“。/ ....” (的id = 1) –

+0

更改WHERE到** WHERE image.id =?“; ** –

回答

0

问题是这条线内循环,我昨天试过,我没有看到它在这一天。

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

作为记录说:“请注意,在调用mysqli_stmt_fetch()之前,所有列都必须被应用程序绑定”。 这意味着我将在循环完成后取数据,而不是同时取数据。