【问题标题】:remove empty results with a 2nd query from array mysqli从数组 mysqli 中使用第二个查询删除空结果
【发布时间】:2018-11-12 19:05:02
【问题描述】:

我有 2 个表,1 个与公司(成本中心)和一个与客户(这些公司的员工)

我需要制作一个表格来编辑或删除按公司(成本中心)分组的那些公司员工的格式错误(如 john smit 和 j. Smit),当我列出所有这些公司时,我会发现很多公司没有客户。因此,我制作了一系列公司(成本中心)并首先检查他们是否有员工,目的是从阵列中删除没有员工的成本中心($bedrijven)。

表格没问题,但我找不到将这些公司从 bedrijven 阵列中删除的方法。

require_once('conn.php');
$query = "SELECT bedrijfID, Houder, Costcenter, Actief FROM bedrijven 
WHERE Actief = 'actief' ORDER BY Costcenter";
$results = mysqli_query($conn, $query);
if (!$results) printf("Query failed: %s\n", $conn->error);

$bedrijven = [];
while($row = mysqli_fetch_assoc($results)) {
$bedrijven[] = $row['Costcenter'];
}
foreach ($bedrijven as $key => $item) {

$query1 = "SELECT * from customer where Costcenter = '$item' ORDER by 
Client";
$customerresult = mysqli_query($conn, $query1) or 
die(mysqli_error($conn));
if (!$customerresult) printf("Query failed: %s\n", $conn->error);
    if($customerresult->num_rows === 0) {
    unset($bedrijven[$key]);
   }  
}

我对 PDO 或功能不熟悉,所以尝试了这种方式,但没有按我的预期工作,unset 不起作用。

代码已编辑,因为它现在正在运行,我希望它也可以帮助其他人。如果有更好的解决方案,请发布。

【问题讨论】:

  • customerresult 被视为常量;它缺少$ 的标志。启用错误报告。那么,那是你的真实代码吗?
  • 它不是重复的,我没有收到任何错误,只是没有从bedrijven数组中删除空结果..
  • 为什么我在一个正常的问题上被否决了?
  • 您能否将var_export($bedrijven); 的结果添加到您的问题中?

标签: php arrays mysqli


【解决方案1】:

如果我了解您的目的,最好将其作为单个查询来完成。可以首先使用 JOIN 来绑定您的表,然后可以根据需要使用其他 WHERE 运算符来优化您的搜索。我不能 100% 确定我是否没看错,这正是您想要加入数据的方式,但如果您使用不同的 JOIN 运算符,您会得到它。

$query = "SELECT Costcenter.bedrijfID, Costcenter.Houder, Costcenter.Costcenter, Costcenter.Actief, customer.* FROM Costcenter
LEFT JOIN customer ON customer.Costcenter = Costcenter.Costcenter 
WHERE Actief = 'Costcenter.actief' AND Costcenter.Costcenter != "" ORDER BY Costcenter.Costcenter";

这样做的最大原因是单个 SQL 调用的处理速度比尝试从 PHP 中的多个调用解析数据要快。

【讨论】:

  • 这将在 bedrijven 表中查找空的成本中心。目标是查看customers表中是否有没有客户的成本中心,然后从bedrijven数组中删除这些成本中心。
  • 对不起,我把数组名和表名弄反了,但过程还是一样。通过选择 Costcenter 并将客户加入其中,您将获得一个组合数据集。然后,您的 WHERE 语句会过滤掉空的成本中心。这样做实际上可以快数千倍,随着数据库的增长,这将产生巨大的影响。
  • 查询的连接方式是一个完美的解决方案,可以减少它的繁重,谢谢建议。
【解决方案2】:

感谢第四只鸟的请求,我发现我在一个简单的解决方案上浪费了很多时间。我不应该这样做: 未设置($bedrijven['成本中心']); 但是

 unset($bedrijven[$key]);

您必须取消设置数组中的键而不是值....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-01
    • 2011-08-21
    • 1970-01-01
    相关资源
    最近更新 更多