Php echo只从数据库返回一个结果
我有2个数据库表用户和画廊,网页将显示无限的个人资料,如果用户有一个画廊,它将显示在那里的个人资料图片 目前数据库中有2个用户用户1有5个图库图像用户2没有 用户和gallery表通过两个表中的D=ID字段连接 第一个用户在其个人资料下方显示其图库,但用户2根本不显示,每个新用户和图库(如果有)都会像列表一样显示在彼此下方。但它呼应出了第一个用户和他的图库,仅此而已 如果在查询中输入WHERE U.ID=U.ID=1或WHERE U.ID=2,将在列表中不同时显示两个用户Php echo只从数据库返回一个结果,php,Php,我有2个数据库表用户和画廊,网页将显示无限的个人资料,如果用户有一个画廊,它将显示在那里的个人资料图片 目前数据库中有2个用户用户1有5个图库图像用户2没有 用户和gallery表通过两个表中的D=ID字段连接 第一个用户在其个人资料下方显示其图库,但用户2根本不显示,每个新用户和图库(如果有)都会像列表一样显示在彼此下方。但它呼应出了第一个用户和他的图库,仅此而已 如果在查询中输入WHERE U.ID=U.ID=1或WHERE U.ID=2,将在列表中不同时显示两个用户 CREATE TABL
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>";
?>
创建表“用户”(
`ID`int(11)无符号非空,
`电子邮件'varchar(255)不为空,
`FullName`varchar(300)不为空,
`JobTitle`varchar(300)不为空,
`生物“文本,
`照片`文字,
)ENGINE=MyISAM默认字符集=utf8;
创建表“gallery”(
`GalleryID`bigint(11)无符号非空,
`ID`int(11)默认为空,
`GalleryImage`文本不为空
)ENGINE=MyISAM默认字符集=utf8;
您需要将表名放在中表名的前面,如:
$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");
在您的情况下,可以更好地使用函数USING(),因为这两个表的列名称相同,例如:
$stmt = $connection->prepare("SELECT * FROM Games JOIN Mods USING(GameID)");
使用JOIN
和Group\u 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
$checker=array();
$profileArray=array();
while($row=mysqli\u fetch\u assoc($result))
{
$profileArray[$row['ID']['GalleryImage'][]=$row['GalleryImage'];
if(!in_数组($row['ID'],$checker))
{
while(列表($key,$value)=每个($row))
{
如果($key!=“GalleryImage”)
{
$profileArray[$row['ID'][$key]=$value;
}
}
$checker[]=$row['ID'];
}
}
foreach($profileArray作为$row)
{
$ID=$row['ID'];
$FullName=$row['FullName'];
$Email=$row['Email'];
$JobTitle=$row['JobTitle'];
$Bio=$row['Bio'];
$Photo=$row['Photo'];
$GalleryImages=$row['GalleryImages'];
如果(设置($Photo)&!空($Photo))
{
$ProfileImage=“$Photo”;
}
其他的
{
$ProfileImage=“avatar.jpg”;
}
$output.=”
$FullName
$JobTitle
$Bio
";
//信息行末尾
$output.=“
”;
//开始画廊行
$output.=”
";
如果(!空($GalleyImages))
{
foreach($GalleyImages作为$img)
{
//按此行中的数据所需的次数显示此行。
$output.=“”;
}
}
其他的
{
$output.=“要显示而不是图像的HTML”;
}
$output.=”
";
}
echo$输出;
在代码中尝试使用此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
那么问题是什么?您始终可以使用检查返回的行数。选择G.GameID、G.GameName、G.GameCover、group_concat(M.ModName)从游戏G加入Mods G.GameID=M.GameID组G.GameIDI我想这一定很难很多视图但没有答案我感觉不太糟糕now@jyothih如果我添加一个ModImageCover,它不会显示所有这些。请尝试此选项选择G.GameID、G.GameName、G.GameCover、,M.ModName作为游戏中的ModName作为G加入Mods作为G.GameID=M上的M。GameID@jyothih现在仍然有问题,第2场不显示,第1场每次重复mod@JYoThI请删除您对提供查询的问题的评论。这不是注释的目的。GROUP_CONCAT()是否给您一个逗号分隔的字符串?是的。你需要引爆它。
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