【问题标题】:Check if all selected values in the database are the same or not检查数据库中所有选定的值是否相同
【发布时间】:2020-09-04 21:12:02
【问题描述】:

我有这段代码,我试图检查所选行中的所有值是否相同并且它只是不工作

$name = $row['name'];

$sql = "SELECT status FROM testing WHERE name='$name'";
$result = mysqli_query($conn, $sql);

$datas = array();

if(mysqli_num_rows($result) > 0) {
    while($row = mysqli_fetch_assoc($result)) {
        $datas[] = $row;
    }
}

if (count(array_unique($datas)) === 1 && end($datas) === 'No') {
    echo 'all the same';
}
else {
    echo 'not all the same';
}

在将值插入数组 $datas 之后,仍然尝试检查数据库中所有选定行中的值 No 是否相同,但它一直在抛出一个错误

注意:数组到字符串的转换

编辑:我添加了这个 $datas[] = $row['status']; 并且它起作用了

【问题讨论】:

标签: php mysql arrays count where-clause


【解决方案1】:

为什么不简单地在数据库中执行此操作?

SELECT COUNT(DISTINCT status) < 2 as all_the_same 
FROM testing 
WHERE name = ?

此查询为您提供一个标量结果集(一行一列,称为all_the_same):如果所有值都相同,您将获得1,否则为0

如果给定名称根本没有行,那么您也会得到0。我们可以通过返回null 来区分这种情况:

SELECT CASE COUNT(DISTINCT status)
    WHEN 0 THEN NULL
    WHEN 1 THEN 1
    ELSE 0
END as all_the_same
FROM testing
WHERE name = ?

【讨论】:

  • 但我想做的是,如果所有数据库值都是“否”,那么就这样做,但如果是“是”或“是和否”,那么就做不同的事情。因为如果我按照你的方式去做,那么这意味着如果所有这些都是“是”,那么如果一切仍然是“否”,你会做同样的事情
  • @GrandFenrir:查询返回“是”1,“否”返回0。应用程序端不需要额外的处理。只需运行查询并获取结果。
猜你喜欢
  • 2019-06-21
  • 2012-05-20
  • 1970-01-01
  • 2014-07-15
  • 2013-11-09
  • 1970-01-01
  • 2019-07-12
  • 2020-12-27
  • 2021-09-11
相关资源
最近更新 更多