Php 完成此SQL查询所需的方法
我需要一种方法来定义一个变量来保存MYSQL中表达式的结果,以便在整个查询过程中使用该变量。Php 完成此SQL查询所需的方法,php,mysql,sql,Php,Mysql,Sql,我需要一种方法来定义一个变量来保存MYSQL中表达式的结果,以便在整个查询过程中使用该变量。 因此,这是可能的: SELECT IF(VALID,EMPLOYEE_NAME,"NULL") AS NAME, /** <-- Note *VALID* IF(VALID,ID,"NULL") AS ID, /** <-- And here... IF(VALID,OCCUPATION,"NULL") AS OCCUPATION, /** <-- And here.
因此,这是可能的:
SELECT
IF(VALID,EMPLOYEE_NAME,"NULL") AS NAME, /** <-- Note *VALID*
IF(VALID,ID,"NULL") AS ID, /** <-- And here...
IF(VALID,OCCUPATION,"NULL") AS OCCUPATION, /** <-- And here...
IF((**LONG EXPRESSION**), TRUE, FALSE) AS VALID; /** <-- Taken from here
这样,它更符合逻辑,更不容易出错。易于维护、可读、甚至优化
MYSQL内部是否有与此对应的版本?因此,为每一行执行定义一个参数?您只需要一个子查询:
SELECT IF(VALID,EMPLOYEE_NAME,"NULL") AS NAME, /** <-- Note *VALID*
IF(VALID,ID,"NULL") AS ID, /** <-- And here...
IF(VALID,OCCUPATION,"NULL") AS OCCUPATION,
...,
VALID
from (select t.*, IF((**LONG EXPRESSION**), TRUE, FALSE) AS VALID
from t
) t
选择IF(VALID,EMPLOYEE_NAME,“NULL”)作为名称,/**可能更合适的方法是使用包含长表达式的WHERE
子句在原始表和子查询之间执行外部联接
SELECT IF(b.rowid IS NULL, "NULL", a.employee_name) AS name,
IF(b.rowid IS NULL, "NULL", a.id) AS id,
IF(b.rowid IS NULL, "NULL", a.occupation) AS occupation,
...,
IF(b.rowid IS NULL, 0, 1) AS valid
FROM mytable a
LEFT OUTER JOIN
(SELECT rowid FROM mytable
WHERE **LONG EXPRESSION**) b
ON a.rowid = b.rowid
这假定rowid
是表中唯一的键列。我理解正确吗?如果它是有效的,那么您希望结果中的每个字段都有一个值,或者为空?因此您希望为结果中的所有有效条目获取名称、ID、职业等,在这些条目中,给出真或假到有效的复杂逻辑是真?是这样吗?您正在描述一个WHERE
子句。我需要一个零或NULL,以及用于结果工作的值。哪里不会返回值为false的行,对吗?这行行吗?与WHERE
子句相比,这有什么好处?对于任何无效的表达式结果,所有字段都是“NULL”
,因此…?您应该向编写问题的人询问这一点。我无法证明那个人需要什么。我的第一个问题是,“它会起作用吗”;我怀疑VALID
是否能在演示的字段列表中工作。旁白:仅仅因为有人建议做某事并不意味着它应该这样做,或者它是有效的。我感觉OP有些误会;我已经在评论中提到了这一点。
SELECT IF(b.rowid IS NULL, "NULL", a.employee_name) AS name,
IF(b.rowid IS NULL, "NULL", a.id) AS id,
IF(b.rowid IS NULL, "NULL", a.occupation) AS occupation,
...,
IF(b.rowid IS NULL, 0, 1) AS valid
FROM mytable a
LEFT OUTER JOIN
(SELECT rowid FROM mytable
WHERE **LONG EXPRESSION**) b
ON a.rowid = b.rowid