2013-03-07 27 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;