2014-04-21 52 views
0

我有以下表 的Aliados(主表和一個我試圖從檢索記錄)。 aliados_direccion已aliados_id作爲一個外鍵 aliados_centro_medico其中也有aliados_id作爲外鍵,使可能於下表用Many_Many關係。 centro_medico。(解決)小與誼CDbCriteria問題加入

在aliados_direccion和centro_medico有一個名爲「parroquias_id」列其來自於對這個查詢沒有意義的不同的表。

我試圖讓網給我看一些「的Aliados」如果他們有一個aliados_direccion或與其相關的一個aliados_centro_medico其中aliados_direccion.parroquias_id或centro_medico.parroquias_id是依賴於用戶的數組已登錄。

數組是罰款和mysql讀取它沒有問題,問題是在實際查詢。

$criteria=new CDbCriteria; 
$criteria->select='a.*'; 
$criteria->alias='a'; 
$criteria->join='RIGHT JOIN (SELECT dir.* FROM aliados_direccion dir 
       WHERE dir.parroquias_id IN ('.$zonas.')) ad ON ad.aliados_id=a.id'; 
$criteria->join='RIGHT JOIN (SELECT many.* FROM aliados_centro_medico many 
         INNER JOIN (SELECT centro_medico.id as idCM 
               FROM centro_medico 
               WHERE centro_medico.parroquias_id 
               IN ('.$zonas.')) cm 
            ON cm.idCM = many.centro_medico_id) acm 
        ON acm.mAlId = a.id'; 
$criteria->compare(blahblahblah); 
//BTW $zonas is the array that I previously built 

這裏發生的情況是,網格會顯示所有記錄或不顯示,這取決於我使用的是左連接還是右連接。 我嘗試使用關係的別名太像>

if($this->aliados_direccion){ 
//First Criteria Join 
elseif($this->aliados_centro_medico){ 
//Second Criteria Join 
} 

但是當我做,它仍然會帶給我的所有記錄,即使我使用INNER JOIN代替。

回答

0

所以結合,這就是答案...... 我不得不做出的$ zonas陣列,我已經在做的SQL語句將完成查詢,像這樣......

$zonas = 'SELECT z.parroquias_id 
      FROM m_zona_mercadeo z, m_tipo_zona_mercadeo t, m_rrhh r 
      WHERE r.usuario_id = '.$user->id.' 
      AND r.tipo_zona_id = t.id AND t.id = z.tipo_zona_id'; 

和查詢弄成這個樣子:

$criteria=new CDbCriteria; 
$criteria->select='a.*'; 
$criteria->alias='a'; 
$criteria->join='INNER JOIN (SELECT ad.aliados_id 
          FROM aliados_direccion ad 
          WHERE ad.parroquias_id IN ('.$zonas.') 
       UNION 
          SELECT acm.aliados_id 
          FROM aliados_centro_medico acm, centro_medico cm 
          WHERE cm.id = acm.centro_medico_id 
          AND cm.parroquias_id IN ('.$zonas.')) u 
       ON u.aliados_id = a.id'; 
1

您更換第一下一參加由。

$criteria->join='RIGHT JOIN (SELECT dir.* FROM aliados_direccion dir 
      WHERE dir.parroquias_id IN ('.$zonas.')) ad ON ad.aliados_id=a.id'; 
$criteria->join='RIGHT JOIN (SELECT many.* FROM aliados_centro_medico many 
        INNER JOIN (SELECT centro_medico.id as idCM 
              FROM centro_medico 
              WHERE centro_medico.parroquias_id 
              IN ('.$zonas.')) cm 
           ON cm.idCM = many.centro_medico_id) acm 
       ON acm.mAlId = a.id'; 

加入是CDbCriteria領域,所以你需要將它們

$criteria->join='RIGHT JOIN (SELECT dir.* FROM aliados_direccion dir 
      WHERE dir.parroquias_id IN ('.$zonas.')) ad ON ad.aliados_id=a.id 
      RIGHT JOIN (SELECT many.* FROM aliados_centro_medico many 
        INNER JOIN (SELECT centro_medico.id as idCM 
              FROM centro_medico 
              WHERE centro_medico.parroquias_id 
              IN ('.$zonas.')) cm 
           ON cm.idCM = many.centro_medico_id) acm 
       ON acm.mAlId = a.id'; 
+0

謝謝你,但這樣做,它仍然不會做任何事情。當我這樣做時,發生的第一件事是它帶來了1行,並且構成了不在表格中的數據。 – arrigonfr

+0

解決了它。當我回家後我會發布解決方案。 – arrigonfr