Php MySQL-Case/If语句
我正在编写一个查询,以从名为Php MySQL-Case/If语句,php,mysql,Php,Mysql,我正在编写一个查询,以从名为contracts的表中获取数据,并将其连接到表user\u data或teams。表contracts中有一列名为contracteeType,我想在其中用作参数的条件变量。在PHP代码中,这将按照以下方式进行: if ($contracteeType === 'user') { // SELECT data FROM user_data table } else { // SELECT data FROM teams table } 我已经尝试过研究这个
contracts
的表中获取数据,并将其连接到表user\u data
或teams
。表contracts
中有一列名为contracteeType
,我想在其中用作参数的条件变量。在PHP代码中,这将按照以下方式进行:
if ($contracteeType === 'user') {
// SELECT data FROM user_data table
} else {
// SELECT data FROM teams table
}
我已经尝试过研究这个问题,我发现了一个解决这个问题的案例说明,但它似乎在我的服务器上不起作用。以下是我的想法:
SELECT *
FROM contracts
CASE
WHEN contracts.contracteeType = 'user'
THEN 'user_data'
WHEN contracts.contracteeType = 'team'
THEN 'teams'
END as tableName
CASE
WHEN contracts.contracteeType = 'user'
THEN 'userID'
WHEN contracts.contracteeType = 'team'
THEN 'teamID'
END as colName
INNER JOIN tableName
ON tableName.colName = '.$contractID
如何使用查询执行此任务,并根据另一个表的值从表中提取数据?我看到“如果”对您有效的唯一方法是使用存储过程。我发现您的问题有点令人困惑,但我相信您可以通过创建和调用存储过程来解决它
这种方法有一些缺点(代码很多,不同于简单的查询),但是它有很多优点(安全、预编译的速度快,对于“PHP”类型的逻辑具有无限的灵活性)
这是一个示例存储过程
DELIMITER //
DROP PROCEDURE IF EXISTS MyProcedure; //
CREATE PROCEDURE MyProcedure()
BEGIN
SET @MyVarA = (SELECT cola FROM tablea);
SET @MyVarB = (SELECT colb FROM tableb);
IF @MyVarA = 'a' AND @MyVarB = 'b' THEN
SELECT A FROM B;
END IF
IF @MyVarA = 'd' AND @MyVarB = 'e' THEN
SELECT D FROM E;
END IF
END; //
SELECT *
FROM contracts c
LEFT JOIN user_data u
ON c.type = 'user' AND c.user_id = u.id
LEFT JOIN team_data t
ON c.type = 'team' AND c.team_id = t.id
WHERE c.contract_id = :contract_id
但是,通过重新评估您的数据库模式,通常可以更好地解决此类不可靠的查询
或者,只需先从
合同中选择数据
,然后发出一条单独的语句从用户或团队表中获取日期。您是否检查了mysql错误日志?您的语法有错误。这种问题可能表明设计不好。不,您不能在查询上选择条件表等等。如果需要,则需要使用带有动态表名的prepare语句的存储过程。是。存在错误,这些错误最初表示为无法识别的关键字(靠近“case”)
。之后的所有错误都是由于大小写语法有点不正确。。。