2

多対多のSQLクエリを実行する方法を理解しようとしていますが、問題が発生しました。

私のdb構造は次のとおりです。

projects_users_roles: project_id, user_id, role_id
user_roles: id, name
projects: id, name, user_id

したがって、私のクエリでは、user_id = 23のすべてのプロジェクトと、projects_users_rolesでそのプロジェクトに割り当てられているロール名を選択したいと思います。

私はそれを持っていると思ったが、それはFALSEを返す

$query = "
SELECT p.name AS project_name
, r.name AS role_name
FROM projects AS p
JOIN projects_users_roles AS a
   ON a.project_id = p.id
JOIN users_roles AS role
   ON role.id = a.role_id WHERE a.user_id = 23
";
$result = mysql_query($query);
var_dump($result);
4

2 に答える 2

6

エイリアスrが定義されていない可能性がありますか?コードサンプルはr.name、のSELECT代わりにで表示されrole.nameます。

$query = "
SELECT p.name AS project_name
, role.name AS role_name
FROM projects AS p
JOIN projects_users_roles AS a
   ON a.project_id = p.id
JOIN users_roles AS role
   ON role.id = a.role_id WHERE a.user_id = 23
";
$result = mysql_query($query);
var_dump($result);
于 2013-01-28T18:50:36.823 に答える
1

クエリに存在しないエイリアスを使用していますr

SELECT  p.name AS project_name, 
        r.name AS role_name
FROM projects AS p
INNER JOIN projects_users_roles AS a
   ON a.project_id = p.id
INNER JOIN users_roles AS r
   ON r.id = a.role_id 
WHERE a.user_id = 23

そして、多分それroleはMySQLの予約語です。

于 2013-01-28T18:51:28.447 に答える