2017-04-26 57 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

不错,我不知道那很酷的感谢 –