2014-09-23 128 views
0

昨天,當我在Phalcon中用UNION發出查詢語句時遇到了問題,並且出現錯誤。我在互聯網上發現了這個問題。但看起來UNION不受支持。有人知道這件事嗎?Phalcon框架中的PHQL UNION查詢

$phql = "SELECT DISTINCT key, type FROM (
      (SELECT DISTINCT key, type FROM TableA INNER JOIN TableB WHERE b.id = $userId) 
      UNION 
      (SELECT DISTINCT key, type FROM TableA INNER JOIN TableC WHERE c.id IN $groupIds) 
) "; 
+0

展示的php代碼和錯誤消息 – Phantom 2014-09-23 07:35:13

+0

這是顯示的錯誤: 解析時:SELECT DISTINCT鍵,鍵入FROM((SELECT DISTINCT key,鍵入FROM TableA INNER JOIN TableB WHERE TableB.id = 1)UNION(SELECT DISTINCT鍵,鍵入FROM TableA INNER JOIN TableC WHERE TableB .id IN(1)))(401)「[」file「] => string(77)」/Test.php「[」line「] => int(161)[」trace「] => string(1459 )「#0 [內部函數]:Phalcon \ Mvc \ Model \ Query-> parse()#1 [內部函數]:Phalcon \ Mvc \ Model \ Query-> execute(NULL,NULL) – jenny 2014-09-23 07:47:18

+0

## This this code# # '$ phql =「SELECT DISTINCT鍵,輸入FROM( (SELECT DISTINCT鍵,輸入FROM表A INNER JOIN表B WHERE TableB.id = $這個 - > ID) UNION (SELECT DISTINCT鍵,輸入FROM表A INNER JOIN TableC WHERE TableC.id IN $ groupIds) ) 「; $ resources = \ Helper :: $ di-> get('modelsManager') - > executeQuery($ phql);' – jenny 2014-09-23 07:49:31

回答

1

你可以查閱一下:
1.檢查$組id不是數組。它應該是隻在格式的字符串「(1,2,3)」 後使用它
2.給名字查詢所有的表(如在我的例子P1,P2,P3
3.它是更安全PARAMS傳遞到您的查詢,而不是真正的變量

下面的代碼工作很好):

$db = \Phalcon\DI::getDefault()->get('db'); 
$stmt = $db->prepare(" 
    SELECT DISTINCT p3.id, p3.name FROM (
     (SELECT DISTINCT p1.id, p1.name FROM project p1 where p1.id = :from) 
     UNION 
     (SELECT DISTINCT p2.id, p2.name FROM project p2 where p2.id IN (:to)) 
    ) p3 
"); 
$stmt->execute(['from' => 3, 'to' => implode(',', array(8))]); 
$created = $stmt->fetchAll(\PDO::FETCH_ASSOC); 
+0

這將無法正常工作如果你使用多個'to'值。 Implode會爲您提供連接字符串(例如'「8,9,10」'),該字符串在DB級別也會被解析爲字符串。 DB將執行查詢:'SELECT DISTINCT p2.id,p2.name FROM project p2其中p2.id IN(「8,9,10」)'這可能不是您所期望的。 – 2015-04-13 14:22:47