2016-01-22 25 views
-1

我在MySQL查詢語法問題。我使用的地方,我想通過函數mySQL語法與OR

protected function generateAlias($tag = null) 
{ 
    return '___' . $tag . '_' . $this->aliasCounter++; 
}  



public function filterKnownUsers(\Tuxie\Bundle\TuxieBundle\Entity\User $user, $addMyUser = false) 
    { 
     $alias = $this->generateAlias(); 

     $query = "SELECT {$alias}_u2.userId FROM Tuxie\\Bundle\\TuxieBundle\\Entity\\TicketUser {$alias}_u1 
    JOIN Tuxie\\Bundle\\TuxieBundle\\Entity\\TicketUser {$alias}_u2 WITH {$alias}_u1.ticketId = {$alias}_u2.ticketId 
    WHERE {$alias}_u1.userId = :{$alias}_user"; 

     if($addMyUser === true) { 

      $this->where("root.userId IN ($query) OR ({$alias}_u2.userId) "); 
     } 
     else { 

      $this->where("root.userId IN ($query)"); 
     } 

     $this->setParameter("{$alias}_user", $user); 
     return $this; 
    } 

過濾knownusers的Symfony2的所以如果在機能的研究第二個參數是真正的過濾器應使用或聲明,給我唯一的實際用戶。可惜的是我得到語法錯誤

[2/2] QueryException: [Syntax Error] line 0, col 354: Error: Expected =, <, <=, <>, >, >=, !=, got ')'

[1/2] QueryException: SELECT root FROM Tuxie\Bundle\TuxieBundle\Entity\User root WHERE (root.email IS NOT NULL AND (root.userId IN (SELECT ____0_u2.userId FROM Tuxie\Bundle\TuxieBundle\Entity\TicketUser ____0_u1 JOIN Tuxie\Bundle\TuxieBundle\Entity\TicketUser ____0_u2 WITH ____0_u1.ticketId = ____0_u2.ticketId WHERE ____0_u1.userId = :____0_user) OR (____0_u2.userId))) AND root.clientId IS NOT NULL

else { 

     $this->where("root.userId IN ($query)"); 
    } 

工作正常。所以問題已經到位

$this->where("root.userId IN ($query) OR ({$alias}_u2.userId) "); 

關於正確的語法是什麼的任何想法?

+0

嗨傑拉德,你怎麼比較的東西的價值是什麼意思?是否有可能簡單...或(我的實際用戶的一些語法) – Filip

回答

1

({$alias}_u2.userId)對於SQL不是合適的條件。你需要將這個值與某個東西進行比較。

'東西'取決於你的表格定義。一些可能性:

({$alias}_u2.userId != '') -- for varchar 
({$alias}_u2.userId > -1) -- for int 
({$alias}_u2.userId NOT NULL) -- for nullable 

可用表情豐富的文檔:
https://dev.mysql.com/doc/refman/5.5/en/expressions.html

+0

現在它是 查詢異常:[語義錯誤]第0行,第339行附近'____ 0_u2.userId':錯誤:'____0_u2 '在其聲明範圍之外使用。 (rooteuser IS NOT NULL AND(root.userId IN(SELECT ____ 0_u2.userId FROM Tuxie \ Bundle \ TuxieBundle \ Entity)[1/2] QueryException:SELECT root FROM Tuxie \ Bundle \ TuxieBundle \ Entity \ User root WHERE \ TicketUser ____0_u1 JOIN Tuxie \ Bundle \ TuxieBundle \ Entity \ TicketUser ____0_u2 WITH ____ 0_u1.ticketId = ____ 0_u2.ticketId WHERE ____ 0_u1.userId =:____ 0_user)OR(____ 0_u2.userId!='')))AND root.clientId IS NOT NULL – Filip

+0

這將是一個新問題,但一個快速提示:您正在試圖從其查詢以外的子查詢中使用一列。這是不可能的。 –

+0

@Filip你可以執行$ this-> getSQL(),並在這裏分享結果sql。我們可能會更清楚地看到問題。 – FZE