PHP-MySQL - Destroy/Disregard Table 字段如果不包含 value/null

PHP-MySQL - Destroy/Disregard Table Fields if it contains no value/null

美好的一天!我试图将一个 Table 加入另一个。是否可以销毁或忽略 table 字段,例如 blotter_entry 如果它不包含任何值或如果它是 null?通过查看下面的屏幕截图,如您所见,我有三个 table 和 blotter_entry。那么就真的要看用户是属于tbl_complainant as tc还是tbl_respondent as te还是res_id,还是tbl_victim as tv.

截图中查询发现blotter_entrytbl_complainant中,如何忽略tbl_respondent and tbl_victim中的两个blotter_entry

我问这个是因为每当我循环这个 SQL 查询并执行 echo $row['blotter_entry'] 以在网站上显示它时,因为如果 res_id 被检测到并找到它 tbl_respondent and tbl_victim 它不会在网页中显示任何内容。比如res_id是3号,他是respondent/victim。每当我在网站上输出 echo $row['blotter_entry'] 时。它不会显示任何内容。

如有任何帮助,我们将不胜感激。谢谢!

Screenshot after running this SQL Query

SELECT tr.res_id
     , tc.res_id
     , tc.blotter_entry
     , te.res_id
     , te.blotter_entry
     , tv.res_id
     , tv.blotter_entry
     , tb.blotter_id
     , tb.blotter_type
     , tb.blotter_reporteddate
     , tb.blotter_reportedtime
     , tb.blotter_incidentdate
     , tb.blotter_incidenttime
     , tb.blotter_status
     , tc.complainant_name
     , te.respondent_name
     , tv.victim_name
  FROM tbl_resident tr
  LEFT 
  JOIN tbl_complainant tc 
    on tr.res_id = tc.res_id
  LEFT 
  JOIN tbl_respondent te 
    on tr.res_id = te.res_id
  LEFT 
  JOIN tbl_victim tv 
    on tr.res_id = tv.res_id
  LEFT 
  JOIN tbl_blotter tb 
    on tc.blotter_entry = tb.blotter_entry 
    OR te.blotter_entry = tb.blotter_entry 
    OR tv.blotter_entry = tb.blotter_entry
 WHERE tr.res_id = 1;

您可以使用 coalesce() 来使用第一个非 null 值。

select 
    tr.res_id, 
    coalesce(tc.blotter_entry, te.blotter_entry, tv.blotter_entry) as blotter_entry
    tb.blotter_id, 
    tb.blotter_type, 
    tb.blotter_reporteddate, 
    tb.blotter_reportedtime, 
    tb.blotter_incidentdate, 
    tb.blotter_incidenttime, 
    tb.blotter_status, 
    tc.complainant_name, 
    te.respondent_name, 
    tv.victim_name
from tbl_resident tr
left join tbl_complainant tc    on tr.res_id = tc.res_id
left join tbl_respondent te     on tr.res_id = te.res_id
left join tbl_victim tv         on tr.res_id = tv.res_id
left join tbl_blotter tb        on tb.blotter_entry in (tc.blotter_entry, te.blotter_entry, tv.blotter_entry)
where tr.res_id = 1;

备注:

  • res_idselect子句中也是有歧义的;它出现了多次,来自不同的 table。由于这是您用于 join 和过滤的列,因此足以为 from 子句

    中的第一个 table 带来价值
  • 我简化了最后一个 table 的连接条件以使用 in 而不是重复的 or 条件