2013-03-07 76 views
1

我想在zend框架2中编写如下的mySQL查询:如何在zend2中编写复杂的sql查询

如何将它转换为zend db选择约定?

SELECT profiles.*, 
    user.email, 
    user.first_name, 
    user.last_name, 
    portfilio_images.profileImage, 
    images.url AS imgurl 
    FROM profiles 

    INNER JOIN user ON user.user_id = profiles.ownerId 

    LEFT JOIN (
     SELECT * 
     FROM portfilio_images 
     WHERE portfilio_images.profileImage = '1' 
    ) as portfilio_images ON portfilio_images.profileId = profiles.id 

    LEFT JOIN images ON images.id = portfilio_images.imageId 

    WHERE profiles.ownerId != '4' AND (profiles.name LIKE '%a%' OR user.first_name LIKE '%a%' OR user.last_name LIKE '%a%') 

    GROUP BY user.user_id 
+0

我有一个写了关于加入,或许它会帮助你: http://stackoverflow.com/questions/14354802/tablegateway-with-multiple-from-表/ 14371056#14371056 – Diemuzi 2013-03-07 14:18:45

+0

谢谢你链接Diemuzi,其实在这个查询中,我遇到了两个困难。第一个是它有一个带有条件的innser select查询,第二个放置在带括号的条件下。对我来说这很复杂,因为我找不到用圆括号设置条件,所以我临时为“$ where [] =”(profiles.name LIKE'%“。$ search。”%'或user.first_name LIKE '%'。$ search。“%'或user.last_name LIKE'%”。$ search。“%')”;“但这绝对是我不喜欢的。 – 2013-03-13 05:31:54

回答

0

你总是可以只执行原始查询:

$sql = "SELECT * FROM test"; 

$statement = $abAdapter->query($sql); 
$result = $statement->execute(); 

$resultSet = new ResultSet; 
$resultSet->initialize($result); 

return $resultSet; 

或者,如果你想添加一些参数

$sql = "SELECT * FROM test where col = ?"; 

$statement = $dbAdapter->query($sql); 
$result = $statement->execute(array(99)); 

$resultSet = new ResultSet; 
$resultSet->initialize($result); 

return $resultSet;