2014-01-17 32 views
0

与GROUP_CONCAT空值我有以下查询:上市在PHP

$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。未显示不匹配的字段。

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

回答

1

您投入的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。这“解除”了right outer join

解决方法是将条件移至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) 
    ) 

这将使失败的right outer join行。

编辑II:

下一个想法。将条件移至group_concat()。如果第一次查询的工作,那么也许这是你想要什么:

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

如果这不起作用,然后用样本数据和预期的效果编辑你的问题。

编辑III:

这是你想要的吗?

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语句中,所有行都会出现。

+0

在哪部分代码中,可能会写下来,我正在尝试但并未使其工作 – user2615859

+0

我做到了,但我得到了表中所有内容的列表,但我应该只有2条信息。无论它是什么,它都会添加所有的字段。 – user2615859

+0

我已经离开代码,因为它是第一次,而不是GROUP_CONCAT(名称)我已经把你的代码,但它不起作用。 – user2615859