我在PHP中有一个代码,我希望显示多次值,因此,即使这些值在它们之间是相同的。我的代码很简单:
$sql = "SELECT photo from table WHERE username IN ('1','2','2') ORDER BY id DESC ";
$res = array();
$result = mysqli_query($con,$sql);
while($row = mysqli_fetch_array($result)){
array_push($res, $row['photo']);
}
echo json_encode($res);
但是这段代码只显示(在json中)两个值的数组(因为用户名2的photo
的值是相同的)。
我想要实现的是创建一个数组,其数量与我定义的用户名WHERE username IN ('1','2','2')
完全相同(所以这里有3个值)。
我希望你理解我,谢谢你的帮助!
答案 0 :(得分:0)
您可以使用select t.photo
from (select '1' as username union all select '2' union all select '3'
) u left join
table t
on t.username = u.username
order by t.id desc;
:
left
请注意,即使用户名不存在,也会返回行。如果要过滤这些行,请删除$ sudo service mongod stop
,以便进行内部联接。
答案 1 :(得分:0)
我认为你所追求的是在最终结果中列出重复项。由于您的SQL只会检索唯一的项目,因此想法是在SQL结果集中包含用户名。然后使用原始用户名列表($userNames
)并为每个用户添加照片。
我已使用mysqli_fetch_all()
来简化获取所有数据的过程,然后使用array_column()
将用户名设为照片的关键。
$userNames = array(1,2,2);
$sql = "SELECT username, photo
from table
WHERE username IN ('".implode("','", $userNames)."')
ORDER BY id DESC ";
$res = array();
$result = mysqli_query($con,$sql);
$photos = mysqli_fetch_all($result, MYSQLI_ASSOC);
$photos = array_column($photos, "photo", "username");
foreach ( $userNames as $user ) {
if ( isset($photos[$user])) {
$res[] = $photos[$user];
}
else {
$res[] = '';
}
}
echo json_encode($res);