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 |
+----+-----------+-------------------+

ご覧のとおり、1 つのプロジェクトには多くのイメージがあります。こんな感じで表示したい…

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

4 に答える 4

1

以下のように文字列を分割する必要があります

$imgArray = explode(',',$row['imagePath']);
//then do 
foreach($imgArray as $im)
{
 if( is_readable($im) ) {
         echo "<img src='$im' title='Image' />";
 }
}
于 2012-09-18T06:13:39.150 に答える
1

EXPLODEが答えだと思います。PHP の爆発 - 各配列項目のスタック オーバーフローに関する質問の実行ループを見てください。あなたの質問に答えてくれると信じています。

また、ウルクエリを次のように変更すると(別のアプローチ)と思います

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

次に、単純なループで簡単に通過できます。

于 2012-09-18T06:14:06.983 に答える
1

foreachを使用して、さまざまな値をループしてみることができます。

構文:

foreach (array_expression as $value)
    statement

最初に、取得したすべての値を次のように配列に挿入します。

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

次に、この配列を次のようにループします。

foreach ($imgArray as $img)
{
 echo "<img src='$img'" />";
}
于 2012-09-18T06:14:41.947 に答える
0

null 以外のすべての値を文字列として返す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";

結果をループします。

于 2012-09-18T06:13:51.260 に答える