2017-04-26 62 views
2

我有2個數據庫表用戶和圖庫,如果用戶有一個圖庫,頁面將顯示無限配置文件,它將顯示在該圖像下。echo僅從數據庫中返回一個結果

當前在DB用戶中有2個用戶1個有5個畫廊圖像用戶2沒有。

用戶和圖庫表由兩個表中的D = ID字段連接。

第一位用戶在他的個人資料下顯示他的畫廊,但用戶2完全不顯示,每個新用戶和畫廊(如果他們有一個)都顯示在對方之下,就像列表一樣。但它回聲了第一個用戶和他的畫廊,就是這樣..

如果我在查詢WHERE U.ID = 1或2中的WHERE U.ID = U.ID它會顯示兩個用戶只是不在同時在列表..

CREATE TABLE `users` (
    `ID` int(11) UNSIGNED NOT NULL, 
    `Email` varchar(255) NOT NULL, 
    `FullName` varchar(300) NOT NULL, 
    `JobTitle` varchar(300) NOT NULL, 
    `Bio` text, 
    `Photo` text, 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 


CREATE TABLE `gallery` (
    `GalleryID` bigint(11) UNSIGNED NOT NULL, 
    `ID` int(11) DEFAULT NULL, 
    `GalleryImage` text NOT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 




<?php 


$stmt = $db->prepare(" 
SELECT U.ID, 
     U.FullName, 
     U.Email, 
     U.JobTitle, 
     U.Bio, 
     U.Photo, 
     group_concat(G.GalleryImage) as GalleryImage 
FROM users as U 
join gallery as G 
ON U.ID = G.ID 
WHERE U.ID = U.ID 

"); 


$stmt->execute(); 
$result = $stmt->get_result(); 


while ($row = mysqli_fetch_assoc($result)) { 

     $ID = $row['ID'];   
     $FullName = $row['FullName'];  
     $Email = $row['Email']; 
     $JobTitle = $row['JobTitle']; 
     $Bio = $row['Bio']; 
     $Photo = $row['Photo'];   
     $GalleryImage = explode(',', $row['GalleryImage']); 

     if (isset($Photo) && ! empty($Photo)) { 
      $ProfileImage = "$Photo"; 
     } else { 
      $ProfileImage= "avatar.jpg"; 
     } 


    echo "<div class='container team-wrap'> 
      <div class='row'> 
      <div class='col-md-6'> 
      <img class='img-responsive' src='$ProfileImage'> 
       </div> 
       <div class=\"col-md-6\"> 
        <strong>$FullName<br>$JobTitle</strong> 
         <br> 
         <p>$Bio</p> 
         <a href='mailto:$Email' class='btn btn-info'>Contact Me</a> 
       </div> 
      </div> 
      </div>"; 

    echo " 

    <br> 
<br> 
<br> 

"; 

    echo "<div class='container team-wrap'>"; 

    foreach ($GalleryImage as $img){   
     if (isset($img) && ! empty($img)) { 

      //Display this row as many times as needed by data in this row. 
      echo "<img style='height: 100px; width: 100px;' src='cdn/assets/gallery/$img'>";  

     } else { 

      echo "NO IMAGES"; 
     } 

    } 


} 

echo"</div>"; 
?> 
+0

那麼是什麼問題?你總是可以使用[mysqli_num_rows](http://php.net/manual/en/mysqli-result.num-rows.php)來檢查返回的行數。 – Pyromonk

+0

SELECT G.GameID,G.GameName,G.GameCover,group_concat(M.ModName)FROM G作爲G加入Mod作爲G.GameID = M.GameID組作爲G.GameID – JYoThI

+0

我假設這一定是相當困難的很多意見,但沒有答案我現在不覺得這麼糟糕 – Case

回答

3
$checker = array(); 
$profileArray = array(); 
while ($row = mysqli_fetch_assoc($result)) 
{ 
    $profileArray[$row['ID']]['GalleryImages'][] = $row['GalleryImage']; 
    if(!in_array($row['ID'], $checker)) 
    { 
     while (list ($key, $value) = each($row)) 
     { 
      if($key != 'GalleryImage') 
      { 
       $profileArray[$row['ID']][$key] = $value; 
      } 
     } 
     $checker[] = $row['ID']; 
    } 
} 

foreach ($profileArray as $row) 
{ 
    $ID = $row['ID']; 
    $FullName = $row['FullName']; 
    $Email = $row['Email']; 
    $JobTitle = $row['JobTitle']; 
    $Bio = $row['Bio']; 
    $Photo = $row['Photo']; 
    $GalleyImages = $row['GalleryImages']; 

    if (isset($Photo) && !empty($Photo)) 
    { 
     $ProfileImage = "$Photo"; 
    } 
    else 
    { 
     $ProfileImage = "avatar.jpg"; 
    } 

    $output .= " 
    <div class='container yep team-wrap'> 
     <div class='row'>   
     <div class='col-md-6'> 
      <img class='img-responsive' src='cdn/assets/artist/$ProfileImage'> 
     </div> 
    <div class='col-md-6'> 
     <strong>$FullName<br>$JobTitle</strong> 
     <br> 
     <p>$Bio</p> 
     <a href='mailto:$Email' class='btn btn-info'>Contact Me</a> 
    </div> 
</div>"; 

    //End of info row 
    $output .= "<br /><br /><br />"; 

    //Start Gallery Row 
    $output .= " 
     <div class='row'> 
     <div class='col-md-12'> 
     <div id='gallery-slider' class='slider responsive'>"; 

    if(!empty($GalleyImages)) 
    { 
     foreach ($GalleyImages as $img) 
     { 
      //Display this row as many times as needed by data in this row. 
      $output .= "<img class='img-responsive' src='cdn/assets/gallery/$img'>"; 
     } 
    } 
    else 
    { 
     $output .= "HTML THAT YOU WANNA DISPLAY instead of images"; 
    } 

    $output .= " 
       </div> 
      </div> 
     </div> 
    </div>"; 
} 
echo $output; 
+0

你去fam了,祝你好運 –

0

你需要把表的名稱表前的WHERE,如:

$stmt = $connection->prepare("SELECT * FROM Games, Mods WHERE Games.GameID = Mods.GameID"); 

這對於確定的曖昧(一式兩份)查詢中兩個表的名稱....

我建議使用關鍵字JOIN的表的關係..

$stmt = $connection->prepare("SELECT * FROM Games JOIN Mods ON Games.GameID = Mods.GameID"); 

更好地在你的情況,你可以使用函數通過()因爲這兩個表中有一列,例如同名:

$stmt = $connection->prepare("SELECT * FROM Games JOIN Mods USING(GameID)"); 
0

使用JOINGroup_concat你會得到逗號分隔的modname這樣mod1,mod2,..

SELECT G.GameID, 
     G.GameName, 
     G.GameCover, 
     group_concat(M.ModName) as ModName 
FROM Games as G 
join Mods as M 
ON G.GameID = M.GameID 
group by G.GameID 

輸出:

GameID GameName GameCover  ModName 

    1  Benten  g1   mod1,mod2,mod3 
+0

@jyothih如果我添加一個ModImageCover它不顯示所有這些。 – Case

+0

嘗試這一個SELECT G.GameID, G.GameName, G.GameCover,M.ModName作爲的modname FROM遊戲爲G 加入MODS的爲M ON G.GameID = M.GameID – JYoThI

+0

@jyothih仍然有問題它現在遊戲2不顯示和遊戲1重複每個mod – Case

1

試試這個SQL在你的代碼。

SELECT u.ID, u.Email, u.FullName, u.JobTitle, u.Bio, u.Photo,GROUP_CONCAT(g.GalleryImage) GalleryImage 
FROM `users` u, `gallery` g 
WHERE u.ID = g.ID GROUP BY u.ID 
+0

是GROUP_CONCAT()給你一個逗號分隔的字符串嗎? –

+0

是的。你需要爆炸它。 –

+0

不錯,我不知道那很酷的感謝 –