2012-07-16 98 views
3

我在嘗試將SQL語句翻譯成Propel,但沒有那麼成功。我有這樣的SQL語句:使用Propel嵌套SQL語句?

SELECT id, param1, param2 
       FROM Field1 
       WHERE id 
       in 
       (
        SELECT DISTINCT Field1_id 
        FROM Field2 
        WHERE id in 
        (
         SELECT DISTINCT `Field2_id` 
         FROM `Field3` 
         WHERE 
         `param7` is null 
         AND param5 > 40 
       ) 
      ) LIMIT 0, 1000 

我開始以原始的方式做它:

$connection = Propel::getConnection(); 
$query = "my Query"; 
$statement = $connection->prepare($query); 
$statement->execute(); 
$results = $statement->fetch(PDO::FETCH_ASSOC); 

這工作得很好,但我不能這樣做的結果$任何行走動作的原因它是一個陣列。

那麼,如何將這個SQL轉換成Propel而沒有原始的方式呢?

+0

哪個推動版? 1.6? – j0k 2012-07-16 07:42:18

+0

Jep !! Propel 1.6 – trouble 2012-07-16 07:50:07

回答

0

據我所知,Propel不處理嵌套查詢。相反,你可以寫table subqueries

+0

我的問題更多的是DISTINCT關鍵字!不知道如何在這種情況下使用它與推進。 – trouble 2012-07-16 08:26:10

1

一個很好的解決方法是在數據庫中創建一個視圖,並在Propel中爲該視圖設置一個只讀表。然後,您可以像使用普通的Propel表一樣使用視圖模型。現在當然這作弊,ORM純粹主義者不贊成,但它會讓你在短期內。

我的方法是嘗試重構表格,我已經用它來進行一個簡單的查詢,但對於大的中央查詢(特別是用於主要向下鑽取屏幕的複雜查詢)我已經更樂意永遠保持觀點的方式。

+0

真的好主意!我現在會用它!但我不能接受你的回答,因爲我真的想看到人們如何以「正確」的方式解決問題。謝謝 – trouble 2012-07-19 07:38:14

+0

沒問題。如果您需要幫助,請在此平息 - 不要忘記Propel網站上的架構文檔非常好。我_think_它是'

'你需要的。 – halfer2012-07-19 08:56:26