donv29560 2014-01-17 15:04
浏览 138
已采纳

使用php中的group_concat列出空值

I have the following query:

$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");

I want to have a result of 7 input fields (for every day of the week). That works correct. Both fields with the 0 or value greate than 0 are listed, actually input field are created.

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>';
}

In the title I want to have names listed if they have certain value, that is working also UNTIL I put the following line in the code in the WHERE CLAUSE

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

The problem is the following in this case The result is not showing the fields that are not matching, where I should have the count(codes.lcfruh)=0. The fields that are not matching are not shown.

Is there a chance that I can put this line elsewhere in the code in order to get the null fields listed also.

  • 写回答

1条回答 默认 最新

  • douben6670 2014-01-17 15:11
    关注

    The code that you are putting into the where clause is:

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

    Although you don't intend for this to be the case, this is also adding the conditions:

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

    Because NULL values are treated as false in the where. This "undoes" the right outer join.

    The solution is to move the conditions to the on clause. Alternatively, you could add additional or clauses specifying that NULL is an ok value.

    EDIT:

    Try changing the where clause to:

    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)
        ) 
    

    This will keep the rows that fail the right outer join.

    EDIT II:

    Next idea. Move the condition to the group_concat(). If the first query is working, then maybe this is what you want:

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

    If this doesn't work, then edit your question with sample data and desired results.

    EDIT III:

    Is this what you want?

    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;
    

    I moved the conditions into the select statement, so all the rows would appear.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 MYSQL 多表拼接link
  • ¥15 关于某款2.13寸墨水屏的问题
  • ¥15 obsidian的中文层级自动编号
  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵
  • ¥15 券商软件上市公司信息获取问题
  • ¥100 ensp启动设备蓝屏,代码clock_watchdog_timeout
  • ¥15 Android studio AVD启动不了