Php 带或的mySQL语法

Php 带或的mySQL语法,php,mysql,symfony,Php,Mysql,Symfony,我在MySQL查询中遇到语法问题。我使用的是Symfony2,我试图通过函数过滤Knownuser protected function generateAlias($tag = null) { return '___' . $tag . '_' . $this->aliasCounter++; } public function filterKnownUsers(\Tuxie\Bundle\TuxieBundle\Entity\User $user, $addMyU

我在MySQL查询中遇到语法问题。我使用的是Symfony2,我试图通过函数过滤Knownuser

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;
    }
所以,如果函数中的第二个参数为true,过滤器应该使用OR语句,并给出我唯一的实际用户。不幸的是,我得到了语法错误

[2/2]QueryException:[语法错误]第0行,第354列:错误:应为 =, =, !=, 得到

[1/2]QueryException:从中选择根目录 Tuxie\Bundle\TuxieBundle\Entity\User root,其中root.email不是 在SELECT\uuuuuuuu0\uuu2.userId FROM中为NULL和root.userId Tuxie\Bundle\TuxieBundle\Entity\TicketUser\uuuuuuuuu0\uu1加入 Tuxie\Bundle\TuxieBundle\Entity\TicketUser\uuuuuuuuuu0\uu2,带 ____0_u1.ticketId=uuuuu 0_u2.ticketId,其中uuuuu 0_1.userId=:uuuuuuuuu 0_用户或uuuuu 0_u2.userId和root.clientId不为空

工作正常。所以问题已经解决了

$this->where("root.userId IN ($query) OR ({$alias}_u2.userId) ");
你知道正确的语法是什么吗?

{$alias}\u u2.userId不是SQL的适当条件。你需要将价值与其他东西进行比较

“某物”取决于您的表定义。一些可能性:

{$alias}{u u2.userId!=-瓦查尔 {$alias}\u u2.userId>-1-用于int {$alias}\u u2.userId不为NULL-可为NULL 有关可用表达式的详细文档:

嗨,杰拉尔德,你将价值与某物进行比较是什么意思?有没有可能简单的。。。或者我的实际用户的一些语法现在是[2/2]QueryException:[语义错误]第0行,第339列靠近“\uuuuuuuu0\u u2.userId”:错误:“\uuuuuu0\u u2”在其声明范围之外使用。[1/2]QueryException:从Tuxie\Bundle\TuxieBundle\Entity\User root中选择root,其中root.email不为NULL,从Tuxie\Bundle\TuxieBundle\Entity\TicketUser\Uuuuu 0\u u1中选择root.userId,并将Tuxie\Bundle\TuxieBundle\Entity\TicketUser\Uuuuuuuuu 0\u u2与uuuuuuuuuu 0\u1.ticketId=\uuuuu0用户id=uuuuu0____0_u2.userId!=并且root.clientId不是null这将是一个新问题,而是一个快速提示:您正试图在子查询的查询之外使用子查询中的列。这是不可能的。@Filip您是否可以执行$this->getSQL,并在此处共享生成的sql。我们可能会更清楚地看到这个问题。谢谢Gerald,最后我将行更改为$this->whereroot.userId IN$query或{$alias}2.userId='$userId';
$this->where("root.userId IN ($query) OR ({$alias}_u2.userId) ");