【问题标题】:Doctrine query Mysql Syntax Error with Left Join左连接的教义查询 Mysql 语法错误
【发布时间】:2013-03-28 20:45:03
【问题描述】:

简介

我在这里遵循本指南,但我被困在最后一部分:http://symfony.com/doc/2.0/cookbook/security/entity_provider.html

我正在尝试从帐户表中查询并加入组表。它与中间表 account_group 是多对多关系。

account Table Fields: id, firstName, and email

account_group Table Fields: account_id and group_id

group Table Fields: id, name, and role

问题

这是我的 DQL:

        SELECT a.firstName, g.role
        FROM WikiRosterMainBundle:Account a
        LEFT JOIN a.groups g
        WHERE a.email = :email

我收到内部服务器错误:

执行 'SELECT a0_.id AS id0, a0_.firstName AS firstName1, a0_.email AS email3, g1_.role AS role18 FROM account a0_ LEFT JOIN account_group a2_ ON a0_.id = a2_.account_id LEFT JOIN 时发生异常组 g1_ ON g1_.id = a2_.group_id WHERE a0_.email = ?'带参数 {"1":"test@test.com"}:

SQLSTATE[42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 'group g1_ ON g1_.id = a2_.group_id WHERE a0_.email = 'test@test.com'' 附近使用正确的语法

我尝试过的:

+给account_group表添加主键(没用)

+编写我自己的左连接 mysql 查询并在 phpmyadmin 中输入(使用单个左连接,但尝试连接 3 个表时失败)

+翻转我要加入/从中选择的表格

我所做的研究

似乎在 mysql 5 中左连接发生了变化。我查看了文档和其他堆栈溢出问题:

http://dev.mysql.com/doc/refman/5.0/en/join.html

MySQL LEFT JOIN after 5.0.12 changes - How to rewrite query

感谢您的帮助!

【问题讨论】:

    标签: mysql symfony doctrine left-join dql


    【解决方案1】:

    基本问题是 group 是 sql 中的保留工作(又名 GROUP BY)。可以使用反引号解决此问题,但最好将表重命名为其他名称,例如 groupx。您可以将实体保留为组,只需更改表名即可。

    【讨论】:

    • 非常感谢!这很有意义。
    【解决方案2】:

    如上所述,最大的问题是命名表Group。每次引用它时都需要使用反引号。我宁愿避开它们,但这是你的决定。以下是加入的方法:

    SELECT a.FirstName, g.Role
    FROM Account a
    LEFT JOIN account_group ag ON a.id = ag.account_id
    LEFT JOIN `group` g ON ag.group_id = g.id
    

    【讨论】:

    • Jason 正在使用 DQL,所以这并没有真正的帮助。语法会有点不同。
    • 感谢@Cerad 的提醒!我在这里放了一个大脑袋,并认为“ DQL”是一个错字。即使是看起来很奇怪的查询也不足以让我知道。尴尬:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-22
    • 1970-01-01
    • 2015-08-01
    • 1970-01-01
    相关资源
    最近更新 更多