2016-04-28 7 views
0

ZF2のユニオンクエリの結果をNot inにしたいとします。このクエリの結果は返されますuninonを使用してzf2クエリ 'not in'句を作成します

Query: $selectLevelTwoPointFive->combine($selectLevelAll, 'UNION'); 
Result: (SELECT `assigned`.`item_id` AS `item_id` FROM `assign_items_level_twopointfive` AS `assigned`) UNION (SELECT `assigned`.`item_id` AS `item_id` FROM `assign_items` AS `assigned`) 

今、このクエリの結果を 'not in'句に使用します。

$select = $sql->select()->from(array(
        "items" => "cu_items" 
      ))->columns(array('item_name'=> new \Zend\Db\Sql\Expression(" group_concat(`items`.`item_name`)")));    

      $select->join(array(
       "ca" => "cu_areas" 
      ), new Expression(" ca.area_id = items.area_id ") 
      , array(
       'area_name' 
      ), $selectLevelAll::JOIN_INNER); 
$select->where->addPredicate(new \Zend\Db\Sql\Predicate\Expression('items.item_id NOT IN (?)', 
          array($selectLevelTwoPointFive))); 

結果は次のとおりです。

SELECT group_concat(`items`.`item_name`) AS `item_name`, `ca`.`area_name` AS `area_name` FROM `cu_items` AS `items` INNER JOIN `cu_areas` AS `ca` ON ca.area_id = items.area_id WHERE `items`.`is_opted` = 'yes' AND `ca`.`is_opted` = 'yes' AND items.item_id NOT IN (((SELECT `assigned`.`item_id` AS `item_id` FROM `assign_items_level_twopointfive` AS `assigned`) UNION (SELECT `assigned`.`item_id` AS `item_id` FROM `assign_items` AS `assigned`))) 

それが表示されているMySQLのエラー:

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UNION (SELECT割り当て .ASが '1'

私の必要なクエリであるラインでFROM assign_items AS assigne」をITEM_IDのitem_id

SELECT group_concat(items.item_name) AS item_name, ca.area_name AS area_name FROM cu_items 
AS items INNER JOIN cu_areas AS ca ON ca.area_id = items.area_id 
WHERE items.is_opted = 'yes' AND ca.is_opted = 'yes' AND items.item_id NOT IN 
(
    (
     SELECT assigned.item_id AS item_id FROM assign_items_level_twopointfive AS assigned 
     UNION (SELECT assigned.item_id AS item_id FROM assign_items AS assigned) 
    ) 
) 

実際にcombine()を使用すると、ラウンドブラケット(最初のクエリ)の和集合(2番目のクエリ)が追加されますが、in not私は最初のクエリユニオン2番目のクエリが必要です。

助けてください。いずれかがmysqlを変更することを提案した場合、それもうまく変わります。

+0

質問を正しく編集してください。コードの各行の前に4つの空白を入れてください。 :) – surajsn

答えて

関連する問題