1

是否可以在 zend frameowrk 中进行此类查询?

SELECT * 
FROM `relations` 
WHERE (root_type, root_id) IN ( ("PRJ", 12), ("PRJ", 13), ("GRP", 42))

我只找到了一种在一个列上使用 IN 子句而不是在两列上进行查询的方法。

4

2 回答 2

2

您可以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;
于 2013-02-05T11:36:19.437 回答
1

这是一个使用 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)中,通常有很多方法可以完成任何给定的任务。

于 2013-02-06T14:09:51.880 回答