2014-01-17 29 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