mysql使用图像连接一对多

mysql使用图像连接一对多,mysql,sql,image,join,Mysql,Sql,Image,Join,我有两张桌子 项目表 +----+--------+ | id | client | +----+--------+ | 1 | James | | 2 | John | +----+--------+ 图像表 +----+-----------+-------------------+ | id | projectId | imagePath | +----+-----------+-------------------+ | 1 | 1 |

我有两张桌子

项目表

+----+--------+
| 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
这篇文章给了我想要的

但当我像这样回响的时候

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

谢谢你们…

你们必须像下面这样断开绳子

$imgArray = explode(',',$row['imagePath']);
//then do 
foreach($imgArray as $im)
{
 if( is_readable($im) ) {
         echo "<img src='$im' title='Image' />";
 }
}
$imgArray=explode(',',$row['imagePath']);
//那就做吧
foreach($imgaray作为$im)
{
如果(是否可读($im)){
回声“;
}
}
因为您使用的是将所有非空值作为字符串返回的字符串

您可以使用以下查询:

$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";
我相信这就是答案。看看堆栈溢出问题。我相信它会回答你的问题

此外,我认为(另一种方法)如果您将查询更改为

SELECT tp.CLIENT,ti.IMAGEPATH
FROM tblProject tp 
JOIN tblImage ti ON tp.Id = ti.ProjectId

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

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

语法:

foreach (array_expression as $value)
    statement
首先在数组中插入所有值,如下所示:

$imgArray = explode(',',$row['imagePath']);
然后通过该数组循环,如下所示:

foreach ($imgArray as $img)
{
 echo "<img src='$img'" />";
}
foreach($imgArray作为$img)
{
回声“;
}

根据您的表和结果集的大小,您最好使用人们提出的“组分解”建议。如果在不使用组CONCAT的情况下执行查询,那么将获得获取和发送每一行的项目和客户机数据的开销。使用GROUP_CONCAT选项,您不会得到这样的开销。但是,请记住,默认情况下,GROUP_CONCAT限制为1024字节。您可以通过更改group_concat_max_len选项来调整此设置。感谢各位的回答。使用explode和Loop through完成了此操作。我对如何针对一个产品(如)获取一张图像有疑问。一个产品有许多(4)个图像,但我只想显示该产品的一个图像。@AliRaza在这种情况下,您不必循环列表。一旦您将图像列表设置为上例中的
$imgaray
,请使用列表索引选择所需的图像,如
echo”“所有的产品对每个产品只有一个图像
,这可以在查询级别本身解决。如果我答对了问题,您可以通过在产品上使用group by并获取id的最小/最大值来实现这一点。这是您使用的一个好方法。但我有一个问题,关于如何针对一个产品获取一个图像,例如。一个产品有很多(4)个图像,但我只想显示一个图像对该产品。
foreach (array_expression as $value)
    statement
$imgArray = explode(',',$row['imagePath']);
foreach ($imgArray as $img)
{
 echo "<img src='$img'" />";
}