Mar*_*ark 35 zend-framework zend-db-table
有没有人知道如何将Zend_Db的子句分组?基本上我有这个查询
$sql = $table->select()
->where('company_id = ?', $company_id)
->where('client_email = ?', $client_email)
->orWhere('client_email_alt = ?', $client_email);
Run Code Online (Sandbox Code Playgroud)
哪个给了我这个:
SELECT `clients`.* FROM `clients` WHERE (company_id = '1') AND (client_email = 'email@address.com') OR (client_email_alt = 'email@address.com')
Run Code Online (Sandbox Code Playgroud)
但我需要它给我这个,OR语句被分组:
SELECT `clients`.* FROM `clients` WHERE (company_id = '1') AND ((client_email = 'email@address.com') OR (client_email_alt = 'email@address.com'))
Run Code Online (Sandbox Code Playgroud)
jas*_*son 55
为了实现这一点,您必须在对where方法的单个调用中构造分组子句.
如果两个条件值相同,则可以执行以下操作:
$select->where('client_email = ? OR client_email_alt = ?', $client_email)
Run Code Online (Sandbox Code Playgroud)
如果字符串中有多个占位符,则DB适配器的quoteInto方法将使用提供的值替换所有占位符.
如果需要OR为每个字段对不同的值进行分组,则必须手动引用这些值.它有点复杂:
$select->where(
$db->quoteInto('client_email = ?', $email1) . ' OR ' . $db->quoteInto('client_email_alt = ?', $email2)
); // $db is your instance of Zend_Db_Adapter_*
// You can get it from a Zend_Db_Table_Abstract
//subclass by calling its getAdapter() method
Run Code Online (Sandbox Code Playgroud)
您可以使用getPart()获取WHERE语句然后连接子查询.
$select->where('client_email = ?', $client_email)
->orWhere('client_email_alt = ?', $client_email);
$subquery = $select->getPart(Zend_Db_Select::WHERE);
$select ->reset(Zend_Db_Select::WHERE);
$select ->where('company_id = ?', $company_id)
->where(implode(' ',$subquery));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10365 次 |
| 最近记录: |