mysql用图像加入一对多

时间:2012-09-18 06:09:08

标签: mysql sql image join

我有两张桌子......

**项目表

 id    client   
 1    James              
 2    John              

**图片表

id   projectId      imagePath
1    1               images/image1.jpg
2    1               images/image2.jpg
3    2               images/image3.jpg
4    2               images/image4.jpg
5    2               images/image5.jpg

如您所见,一个项目有很多图像。我想要显示它 这样......

James

images/img1.jpg
images/img2.jpg

John

images/img3.jpg
images/img4.jpg
images/img5.jpg

这篇文章给了我想要的东西https://stackoverflow.com/a/2451065/1214535

但是当我这样回声时

<img src='".$row['imagePath']."/>

图片标记中的结果我得到了这个

<img src="images/img3.jpg,images/img4.jpg,images/img5.jpg">

而不是

<img src="images/img3.jpg"/> 
<img src="images/img4.jpg"/>
<img src="images/img5.jpg"/>

如何更改查询以便我可以正确/单独显示图像

这是我正在使用的查询

$sql="SELECT images.projectId,project.client,
GROUP_CONCAT(images.imagePath SEPARATOR ', ') 
AS 'imagePath' 
from project left JOIN images on project.id=images.projectId 
GROUP BY project.id ASC";
谢谢你们......

4 个答案:

答案 0 :(得分:1)

你必须打破下面的字符串

$imgArray = explode(',',$row['imagePath']);
//then do 
foreach($imgArray as $im)
{
 if( is_readable($im) ) {
         echo "<img src='$im' title='Image' />";
 }
}

答案 1 :(得分:1)

我相信EXPLODE就是答案。看看PHP explode - running loop through each array item堆栈溢出问题。我相信它会回答你的问题。

此外,如果您将查询更改为

,我认为(另一种方法)
SELECT tp.CLIENT,ti.IMAGEPATH
FROM tblProject tp 
JOIN tblImage ti ON tp.Id = ti.ProjectId

然后一个简单的循环将很容易让你通过。

答案 2 :(得分:1)

您可以尝试使用foreach循环显示不同的值。

语法:

foreach (array_expression as $value)
    statement

首先在数组中插入您获得的所有值,如下所示:

$imgArray = explode(',',$row['imagePath']);

然后循环遍历此数组:

foreach ($imgArray as $img)
{
 echo "<img src='$img'" />";
}

答案 3 :(得分:0)

因为您使用的是GROUP_CONCAT,它将所有非空值作为字符串返回。

您可以使用以下查询:

$sql="SELECT images.projectId,project.client,images.imagePath SEPARATOR
AS 'imagePath'
from project left JOIN images on project.id=images.projectId 
GROUP BY project.id ASC";

循环结果。