我必须执行一个复杂的查询,从 7-8 个表中选择几列。
我们不想用编程语言(PHP - Symfony 1.4/Propel 1.4 在我们的例子中)编写该查询,而是创建一个视图或存储过程,以便为开发人员提供非常简单的选择查询。我很困惑什么会更好。
我们需要以下格式的查询:
SET @PlayerId = 1;
SELECT CASE WHEN mat.player1id = @PlayerId THEN mat.player2id ELSE mat.player1id END as opponent
/*plus many other columns*/
FROM `wzo_matches` as mat /*plus few other tables*/
WHERE (mat.player1id =@PlayerId OR mat.player2id=@PlayerId)
/*plus other join conditions*/
观点的问题是,SET @PlayerId=xx
陈述。我们事先不知道玩家 ID,但会通过 PHP 传递。我希望这是排除观点的原因;有什么解决方法吗?
其他选项将是存储过程。唯一的问题是,它将为每个查询创建一个新视图,因此数据库的操作将非常繁重。
有人可以建议最好的方法,以便开发人员可以从上述查询中获取所需的数据,而无需在 PHP 中编写上述复杂查询。(显然通过 SP 或从那里查看和简单的选择查询)