Php 完成此SQL查询所需的方法

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.

我需要一种方法来定义一个变量来保存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... 

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