2016-12-09 4 views
1

私はこのようなデータベースを持っており、このように私のウェブサイトに画像を取得したい、スクリーンショットPHP MySQL - このように取得するには?

enter image description here

を参照してくださいが、私は知らない、SQLは次のように取得することができましたか?私だけが知っている

$sql = "SELECT id, photographer, image FROM MyTable"; 
$result = mysqli_query($conn, $sql); 

while($row = mysqli_fetch_assoc($result)) 
       { 
        echo "<tr>"; 
        echo "<td align='center'>".$i."</td>"; 
        echo "<td>".$row['photographer']."</td>"; 
        echo "<td><img src='".$row['image']."'></td>"; 

        echo "</tr>"; 

       } 

しかし、それは私が欲しいものを示していません。どうすればいいですか?または私は間違ったデータベースを設計する?

+0

なぜあなたは 'username'、' password'、 'email'をエコーし​​ていますか?それらは選択した列ではありません。 – Barmar

+0

関連する行を保持する方法については、http://stackoverflow.com/questions/27575562/how-can-i-list-has-same-id-data-with-while-loop-in-php/27575685#27575685を参照してください。表の中に一緒に出力されます。それは各グループの見出し行でそれを行う方法を示していますが、同じ一般的なアイデアを使用して、すべてのイメージをテーブルの同じ行に配置することができます。 – Barmar

+0

@Barmarそれだけです。 – doflamingo

答えて

1

データベース設計がすべて間違っているわけではありません。別の写真家を格納する別のテーブルを作成し、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にチェックを入れてください。

関連する問題