2017-08-04 3 views
0

GROUP_CONCATを使用して、複数のイメージエントリを持つユーザIDからデータベース情報(イメージ)を取得しますか?これらのイメージは、ファイルパスの形式です。その場合、イメージIDをユーザーIDごとに1つの行に出力することができます。whileループでGROUP_CONCATを使用して、同じユーザが複数のデータベースエントリを1行で出力する場合

この問題に関する広範な調査の後、私は必要なものの簡単な例を見つけましたが、私が現在持っているクエリでは失われてしまいます。問題の画像部分が'<img src="images/colleges/'.$cImage.'"/>' . '</div>'ある

<table> 
       <th></th> 
       <th>Name</th> 
       <th>Location</th> 
       <th>High School</th> 
       <th class="thLargest">Colleges</th> 
      </table> 
      <table> 
        <?php 
         session_start(); 

         $conn = mysqli_connect("", "", "", ""); 


         if (mysqli_connect_errno()) { 
          echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
         } 

         $sql = "SELECT college.id, college.title, GROUP_CONCAT(college.image) AS cImage, users.profileImage, users.fname, users.lname, users.level AS ulevel, users.city, users.state, users.highschool, users.primarysport, usercollege.id, usercollege.collegeid 
           FROM college, users, usercollege 
           WHERE usercollege.collegeid = college.id AND usercollege.userid = users.id 
           ORDER BY usercollege.createdate ASC"; 


         if ($result = mysqli_query($conn, $sql)) { 
          while ($row = mysqli_fetch_assoc($result)) { 


           if ($row['status'] == null) { 
            echo ""; 
           } 

           if ($row['ulevel'] == "A Profile") { 
            echo '<tr>' . 
              '<td class="small">' . '<a href="http://www.example.com/aprofile.php?user="'.$row["username"] . '>' . '<img src="'.$row['profileImage'].'" />' . '</a>' . '</td>' . 
              '<td class="large">' . $row['fname']. ", " . $row['lname'] . '</td>' . 
              '<td class="large">' . $row['city'] . ", " . $row['state'] . '</td>' . 
              '<td class="large">' . $row['highschool'] . " (" . $row['primarysport'] . ") " . '</td>' . 
              '<td class="largest">' . 
               '<div class="Limage">' . '<img src="images/colleges/'.$cImage.'"/>' . '</div>' . 
              '</td>' . 
             '</tr>'; 
           } 

          } 


         mysqli_free_result($result); 
         } 

         mysqli_close($conn); 
        ?> 
      </table> 

:今のところ、ここで

は私のコードです。

ユーザーは大学画像を最大10個まで入力することができるため、同じユーザーIDを使用して別の行に表示するのではなく、これらの画像を並べて表示したいと考えています。

つまり、データベース内の複数の行のユーザーデータを1つの行にまとめ、そのテーブルに重複するユーザーIDがないようにしたいとします。

私はcImageを爆発させ、foreachも使っていますが、これは私の経験が不足しているところです。

答えて

0
SELECT users.profileImage 
    , users.fname 
    , users.lname 
    , users.city 
    , users.state 
    , users.highschool 
    , users.primarysport 
    , group_concat(college.image) AS cImage 
    FROM usercollege 
    INNER JOIN users 
     ON users.id = usercollege.userid 
    INNER JOIN college 
     ON college.id = usercollege.collegeid 
    GROUP BY users.id 
    ORDER BY usercollege.createdate ASC 

foreach(explode(',', $row['cImage']) as $img) 
    echo '<div class="Limage">' . '<img src="images/colleges/'.$img.'"/>' . '</div>'; 
+0

のforeachで構文エラーを受け取ります。助言がありますか。 –

+0

[この質問](https://stackoverflow.com/questions/5861826/exploding-an-array-within-a-foreach-loop-parameter)のように動作する必要があります。おそらく 'foreach'の前に'; 'がありません。 – Sal

+0

私はsqlクエリを '' SELECT ...... ASC ';'に変更しました。これにより、構文エラーを解決するのに役立ちました。 'foreach'は角かっこを必要としますか? –

関連する問題