通过外键获取标签

时间:2013-06-15 10:31:54

标签: mysql doctrine-orm

这些是我的表。

我的桌子是

用户表

id Name Sex
1  bob   1
2  taro  1
3  can   2

性表

id  label
1   male
2   female

User.sex是Sex.id的外键

我想得到的是如下所示

姓名性 鲍勃男 芋头女 可以女性

$query = $em->createQuery(
SELECT a,id,a.sex
FROM UserBundle:User a)

它说

[Semantical Error] line 0, col 97 near 'sex': Error: Invalid PathExpression. Must be a StateFieldPathExpression

我猜身份可以帮助解决这个问题。 所以我试过

$query = $em->createQuery(
SELECT a,id,IDENTITY(a.sex) AS sex
FROM UserBundle:User a)

$user = $query->getResult();
$user[0]['sex']  // 

它显示'1'(id),但我要显示标签名称

请提供一些提示。

非常感谢

1 个答案:

答案 0 :(得分:1)

在SQL中完成此任务的规范方法是使用子查询。有什么影响:

Select u.name s.label
From user u, sex s 
where s.ID in (Select sex
             from u
             where u.id = 1);

会为您提供标有性别的任何一条用户记录。 因此,您需要以运行子查询的方式修改准备好的语句。

对于结果集中的多个记录,您可以考虑使用内部联接来表示SQL语句。

Select u.name s.label
from user u inner join sex s
on u.sex = s.id;

会为您提供每个用户名称和性别标签的匹配集。

看起来你正在使用像脚本语言预处理语句功能(就是php?),所以一定要仔细阅读你的语言语法,正确设置准备好的语句以避免恶意用户的注入攻击