我一直在查看“MySQL”和“CONCAT_WS”的所有其他提及,但它们并没有解决我的问题。我在 MySQL (5.5.6x) 中建立了一个医学数据库,其中包含 180 个表和数千个字段。数据库表和表单的处理是通过一个大型 PHP 应用程序完成的。
我的 SQL 查询的一部分是以下代码:
CONCAT_WS(""
, COALESCE(CASE WHEN op.OP5Begleiteingriff1 = "2" THEN "Cholezystektomie " ELSE CONCAT("", "") END, "NULL")
, COALESCE(CASE WHEN op.OP5Begleiteingriff2 = "2" THEN "Appendektomie " ELSE CONCAT("", "") END, "NULL")
, COALESCE(CASE WHEN op.OP5Begleiteingriff3 = "2" THEN "Adhäsiolyse " ELSE CONCAT("", "") END, "NULL")
, COALESCE(CASE WHEN op.OP5Begleiteingriff4 = "2" THEN "Antrum-Resektion " ELSE CONCAT("", "") END, "NULL")
, COALESCE(CASE WHEN op.OP5Begleiteingriff5 = "2" THEN "Hiatoplastie " ELSE CONCAT("", "") END, "NULL")
, COALESCE(CASE WHEN op.OP5Begleiteingriff6 = "2" THEN "Hernien-Reparatur " ELSE CONCAT("", "") END, "NULL")
, COALESCE(CASE WHEN op.OP5Begleiteingriff7 = "2" THEN "Band-Entfernung " ELSE CONCAT("", "") END, "NULL")
, COALESCE(CASE WHEN op.OP5Begleiteingriff8 = "2" THEN "Fundus-Resektion " ELSE CONCAT("", "") END, "NULL")
, COALESCE(CASE WHEN op.OP5Begleiteingriff9 = "2" THEN "Rest-Gastrektomie " ELSE CONCAT("", "") END, "NULL")
, COALESCE(CASE WHEN op.OP5Begleiteingriff10 = "2" THEN "Leber-Biopsie " ELSE CONCAT("", "") END, "NULL")
, COALESCE(CASE WHEN op.OP5Begleiteingriff99 = "2" THEN "Andere Begleiteingriffe" ELSE CONCAT("", "") END, "NULL")
) AS "Begleiteingriffe (OP 5)",
这表示字段的内容提取
op.OP5Begleiteingriffx = "2"
(= "2"
表示已单击相应的复选框)从 x 等于 -1 到 -10 或 -99。
现在,我想将结果的显示限制为那些非空的字段。
有没有一种优雅的方法可以在短时间内做到这一点?
到目前为止,我已经实现了这样的东西:
FROM dat_patient p
LEFT OUTER JOIN dat_optherapie op ON op.patID = p.ID
LEFT OUTER JOIN users_benutzer ub ON ub.ID = p.UserID
WHERE op.OP1Datum BETWEEN "1950-01-01" AND "2050-12-31"
AND (
"Begleiteingriffe (OP 1)" != "" OR "Begleiteingriffe (OP 2)" != "" OR "Begleiteingriffe (OP 3)" != "" OR "Begleiteingriffe (OP 4)" != "" OR "Begleiteingriffe (OP 5)" != ""
)
ORDER BY p.Nachname, p.Vorname, p.Gebdatum; ';
它仍然提供所有结果并且不会省略空字段:
是否有可能以这种方式处理它,还是我需要为每个
op.OP5Begleiteingriffx
就像上面提到的那样AND ...
?