是否可以在 zend frameowrk 中进行此类查询?
SELECT *
FROM `relations`
WHERE (root_type, root_id) IN ( ("PRJ", 12), ("PRJ", 13), ("GRP", 42))
我只找到了一种在一个列上使用 IN 子句而不是在两列上进行查询的方法。
是否可以在 zend frameowrk 中进行此类查询?
SELECT *
FROM `relations`
WHERE (root_type, root_id) IN ( ("PRJ", 12), ("PRJ", 13), ("GRP", 42))
我只找到了一种在一个列上使用 IN 子句而不是在两列上进行查询的方法。
您可以JOIN
改为使用它们,如下所示:
SELECT r.*
FROM relations r
INNER JOIN
(
SELECT 'PRJ' AS root_typ, 12 AS root_id
UNION ALL
SELECT 'PRJ', 13
UNION ALL
SELECT 'GRP', 42
) AS t ON r.root_type = t.root_type
AND r.root_id = t.root_id;
这是一个使用 Zend_Db_Statement 的 ZF1 查询:
//common way to aquire currently selected db adapter
$db = Zend_Db_Table::getDefaultAdapter();
//$db is the currently selected database adapter.
$stmt = $db->query(
SELECT * FROM `relations`
WHERE (root_type, root_id)
IN ( ("PRJ", 12), ("PRJ", 13), ("GRP", 42))
);
这个答案不是为了讽刺。对于复杂的数据库查询,Zend_Db_Statement
通常是执行查询的最简单/最简单/最好的方式。
如果您想要更适合您需求的解释,请提供有关您的结构的更多信息。在 Zend Framework(1 或 2)中,通常有很多方法可以完成任何给定的任务。