0

これらは私のテーブルです。

私のテーブルは

ユーザーテーブル

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

Identity がこの問題を解決できると思います。だから私はそのような

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

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

「1」(id)と表示されますが、ラベル名を表示したい

ヒントをください。

どうもありがとう

4

1 に答える 1

1

SQL でこのタスクを実行する標準的な方法は、サブクエリを使用することです。効果のあるもの:

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

性別がラベル付けされたユーザーレコードを1つ取得します。そのため、サブクエリを実行するように準備済みステートメントを変更する必要があります。

結果セットに複数のレコードがある場合は、内部結合を使用して SQL ステートメントを表現することを検討してください。

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

各ユーザーの名前と性別のラベルの一致したセットを取得します。

スクリプト言語のプリペアド ステートメント機能 (それは php ですか?) のようなものを使用しているようです。そのため、悪意のあるユーザーからのインジェクション攻撃を回避するために、プリペアド ステートメントを適切に設定する際に言語の構文をよく読んでください。

于 2013-06-15T11:08:37.323 に答える