2012-10-17 68 views
4

我有一個drupal db_select的問題。Drupal db_select(),如何在條件中使用兩個db字段?

這裏是我的代碼:

$query = db_select('node', 'n'); 
    $query->addField('n', 'nid', 'nid'); 
    $query->addField('cfs', 'entity_id', 'feature_support_id'); 
    $query->addField('fpffs', 'entity_id', 'parent_feature_support_id'); 
    $query->addField('cfsfc', 'feature_support_compared_target_id', 'feature_support_compared'); 
    $query->addField('fpffsfc', 'feature_support_compared_target_id', 'parent_feature_support_compared'); 
    //Get feature_support of the feature 
    $query->join('field_data_feature_support_feature', 'cfs', 'n.nid = cfs.feature_support_feature_target_id'); 
    $query->join('field_data_feature_support_compared', 'cfsfc', 'cfs.entity_id = cfsfc.entity_id'); 
    //Get parent feature_support through feature 
    $query->join('field_data_feature_parent_feature', 'fp', 'n.nid = fp.entity_id'); 
    $query->join('field_data_feature_support_feature', 'fpffs', 'fp.feature_parent_feature_target_id = fpffs.feature_support_feature_target_id'); 
    $query->join('field_data_feature_support_compared', 'fpffsfc', 'fpffs.entity_id = fpffsfc.entity_id'); 
    $query->condition('n.nid', $node_revision->nid, '='); 
    $query->condition('cfsfc.feature_support_compared_target_id', 'fpffsfc.feature_support_compared_target_id', '='); 
    $result = $query->execute(); 

在DB我的要求應該是

SELECT n.nid AS nid, cfs.entity_id AS feature_support_id, fpffs.entity_id AS parent_feature_support_id, cfsfc.feature_support_compared_target_id AS feature_support_compared, fpffsfc.feature_support_compared_target_id AS parent_feature_support_compared 
FROM node n 
INNER JOIN field_data_feature_support_feature cfs ON n.nid = cfs.feature_support_feature_target_id 
INNER JOIN field_data_feature_support_compared cfsfc ON cfs.entity_id = cfsfc.entity_id 
INNER JOIN field_data_feature_parent_feature fp ON n.nid = fp.entity_id 
INNER JOIN field_data_feature_support_feature fpffs ON fp.feature_parent_feature_target_id = fpffs.feature_support_feature_target_id 
INNER JOIN field_data_feature_support_compared fpffsfc ON fpffs.entity_id = fpffsfc.entity_id 
WHERE (n.nid = '9') AND (cfsfc.feature_support_compared_target_id = fpffsfc.feature_support_compared_target_id) 

這個請求工作時,我嘗試在phpMyAdmin,但相反在mysql的日誌我有

SELECT n.nid AS nid, cfs.entity_id AS feature_support_id, fpffs.entity_id AS parent_feature_support_id, cfsfc.feature_support_compared_target_id AS feature_support_compared, fpffsfc.feature_support_compared_target_id AS parent_feature_support_compared 
FROM node n 
INNER JOIN field_data_feature_support_feature cfs ON n.nid = cfs.feature_support_feature_target_id 
INNER JOIN field_data_feature_support_compared cfsfc ON cfs.entity_id = cfsfc.entity_id 
INNER JOIN field_data_feature_parent_feature fp ON n.nid = fp.entity_id 
INNER JOIN field_data_feature_support_feature fpffs ON fp.feature_parent_feature_target_id = fpffs.feature_support_feature_target_id 
INNER JOIN field_data_feature_support_compared fpffsfc ON fpffs.entity_id = fpffsfc.entity_id 
WHERE (n.nid = '9') AND (cfsfc.feature_support_compared_target_id = 'fpffsfc.feature_support_compared_target_id') 

最後看到,在WHERE中,有'fpffsfc.feature_support_compared_target_id'的單引號這不應該在那裏。

顯然是因爲 - >條件的第二個參數似乎只能接受變量。任何人都知道我可以如何使用db_select創建兩個db字段的條件?

感謝您給我帶來的任何幫助。

+1

你可能尋找['SelectQuery :: where'(http://api.drupal.org/api/drupal/includes!database!select.inc/function/SelectQuery%3A%3Awhere/7) – Clive

回答

2

使用$ query-> where($ snippet,$ args = array());

$query->where('cfsfc.feature_support_compared_target_id = fpffsfc.feature_support_compared_target_id'); 
相關問題