在SQL

时间:2018-05-06 20:25:21

标签: php mysql sql

我在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个值)。 我希望你理解我,谢谢你的帮助!

2 个答案:

答案 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);