データベース設計がすべて間違っているわけではありません。別の写真家を格納する別のテーブルを作成し、photographer
カラムをMyTable
テーブルにすることができます。
photographer_tb:
id | photographer_name
---+--------------------
1 | Photographer A
2 | Photographer B
3 | Photographer C
たMyTable:
まずがJOIN
です:(?)すると
id | photographer_id | image
---+-----------------+-----------
1 | 1 | foo1.jpg
2 | 1 | foo2.jpg
3 | 1 | foo3.jpg
4 | 2 | foo4.jpg
5 | 2 | foo5.jpg
6 | 3 | foo6.jpg
、あなたが欲しいの表示を実現するための2つの選択肢を持つことができますクエリ:
$sql = "SELECT * FROM MyTable a LEFT JOIN photographer_tb b ON a.id = b.photographer_id";
$result = mysqli_query($conn, $sql);
while($row = mysqli_fetch_array($result)){
if(empty($lastphotographer)){
echo '<tr>
<td align="center">'.$row['photographer_name'].'</td>
<td>';
} else if($lastphotographer != $row['photographer_name']){
echo '</td></tr>
<tr>
<td>'.$row['photographer_name'].'</td>
<td>';
}
echo '<img src="'.$row['image'].'">';
$lastphotographer = $row['photographer_name'];
}
echo (mysqli_num_rows($result) > 0)?'</td></tr>':'';
第二は、ネストされたループです。ループは、最初にすべての写真家は、その後、リンクされた画像のすべてのために内部に別のループを実行します。
$sql = "SELECT id, photographer_name FROM photographer_tb";
$result = mysqli_query($conn, $sql);
while($row = mysqli_fetch_array($result))
{
echo '<tr>
<td align="center">'.$row['photographer_name'].'</td>
<td>';
$sql2 = "SELECT images FROM MyTable WHERE photographer_id = '$row[id]'";
$result2 = mysqli_query($conn, $sql);
while($row2 = mysqli_fetch_array($result2)){
echo '<img src="'.$row2['images'].'">';
}
echo '</td></tr>';
}
あなたはまた、他の実行可能なオプションについては、記事のコメントを参照することができます。すでにmysqli_*
を使用している間は、prepared statementにチェックを入れてください。
なぜあなたは 'username'、' password'、 'email'をエコーしていますか?それらは選択した列ではありません。 – Barmar
関連する行を保持する方法については、http://stackoverflow.com/questions/27575562/how-can-i-list-has-same-id-data-with-while-loop-in-php/27575685#27575685を参照してください。表の中に一緒に出力されます。それは各グループの見出し行でそれを行う方法を示していますが、同じ一般的なアイデアを使用して、すべてのイメージをテーブルの同じ行に配置することができます。 – Barmar
@Barmarそれだけです。 – doflamingo