gpt4 book ai didi

php - 在 php 中使用 group_concat 列出空值

转载 作者:行者123 更新时间:2023-11-29 13:18:19 26 4
gpt4 key购买 nike

我有以下查询:

$query4 = $db->query("SELECT count(codes.lcfruh) AS front_lcfruh, kw, datum,   GROUP_CONCAT(name) AS name FROM codes 
RIGHT JOIN dienstplan ON (dienstplan.schicht = codes.lcfruh OR dienstplan.schicht = codes.lcteildienst OR dienstplan.schicht = codes.lcshteil)
RIGHT JOIN personal ON personal.perso_id = dienstplan.perso_id
WHERE personal.status_sum = 'rezeption' AND dienstplan.schicht!='' AND dienstplan.kw = '$kw' AND personal.zeigen='ja'
GROUP BY dienstplan.datum");

我想要 7 个输入字段的结果(一周中的每一天)。这样做是正确的。列出了 0 或值大于 0 的两个字段,实际上创建了输入字段。

while ($result = $query4 ->fetch_object()) {
echo '<p class="taglist1"><input name="" type="text" title="'.$result->name.'" class="zbroj'.$result->front_lcfruh.'" value="'.$result->front_lcfruh.'"></p>';
}

在标题中,我希望列出具有特定值的名称,这也有效,直到我将以下行放入 WHERE CLAUSE

AND (dienstplan.schicht = codes.lcfruh OR dienstplan.schicht = codes.lcteildienst OR     dienstplan.schicht = codes.lcshteil) 

在这种情况下,问题如下:结果没有显示不匹配的字段,其中我应该有 count(codes.lcfruh)=0。不匹配的字段不会显示。

我是否可以将此行放在代码中的其他位置,以便也列出空字段。

最佳答案

您要放入 where 子句中的代码是:

AND (dienstplan.schicht = codes.lcfruh OR
dienstplan.schicht = codes.lcteildienst OR
dienstplan.schicht = codes.lcshteil
)

尽管您不希望出现这种情况,但这也添加了条件:

dienstplan.schicht is not null and
(codes.lcfruh is not null or dienstplan.schicht is not null OR dienstplan.schicht is not null)

因为 NULL 值在 where 中被视为 false。这“撤消”了右外连接

解决方案是将条件移至 on 子句。或者,您可以添加额外的 or 子句,指定 NULL 是一个合适的值。

编辑:

尝试将 where 子句更改为:

AND (dienstplan.schicht = codes.lcfruh OR
dienstplan.schicht = codes.lcteildienst OR
dienstplan.schicht = codes.lcshteil OR
dienstplan.schicht is null or
(codes.lcfruh is null and codes.lcteildienst is null and codes.lcshteil is null)
)

这将保留未通过右外连接的行。

编辑二:

下一个想法。将条件移至group_concat()。如果第一个查询有效,那么也许这就是您想要的:

GROUP_CONCAT(case when dienstplan.schicht = codes.lcfruh OR
dienstplan.schicht = codes.lcteildienst OR
dienstplan.schicht = codes.lcshteil
then ''
else name
end)

如果这不起作用,请使用示例数据和所需结果编辑您的问题。

编辑三:

这是你想要的吗?

SELECT count(case when personal.status_sum = 'rezeption' AND dienstplan.kw = '52'
then codes.lcfruh
end) AS front_lcfruh,
kw, datum,
GROUP_CONCAT(case when personal.status_sum = 'rezeption' AND dienstplan.kw = '52'
then name
end) AS name
FROM codes
RIGHT JOIN dienstplan ON (dienstplan.schicht = codes.lcfruh)
RIGHT JOIN personal ON personal.perso_id = dienstplan.perso_id
GROUP BY dienstplan.datum;

我将条件移至 select 语句中,因此所有行都会显示。

关于php - 在 php 中使用 group_concat 列出空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21189054/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com