各私はあなたに私のmysqlのクエリで使用するテーブル間の関係の図を与えることから始めましょう:MySQLのクエリ、さまざまな参加型の
table relationship http://eintranet.r717.net/index_htm_files/perm_relationships.png
私が見えるのクエリを持っていますこのように:
SELECT *
FROM `permissions`
WHERE `id` IN (
SELECT pr.perm_id
FROM `user_roles` as ur
LEFT JOIN `permissions_role` as pr
ON ur.role_id = pr.role_id
WHERE ur.user_id = '$userid'
)
OR `id` IN (
SELECT `perm_id`
FROM `permissions_user`
WHERE `user_id` = '$userid'
)
$userid
現在のユーザのユーザテーブルからIDです。私は彼/彼女の役割と彼/彼女のIDに基づいて、ユーザーに割り当てられたすべての権限を表す配列に結果から許可名を格納します。
<?php
$user_perms = array();
if(mysql_num_rows($query) > 0):
while($result = mysql_fetch_array($query):
$user_perms[] = $result('name');
endwhile;
endif;
?>
print_r($user_perms);
は次のような出力を生成します私が何をしたいか
Array (
[0] => ACCESS_TELEPHONELIST_PAGE
[1] => ACCESS_VACATIONSCHED_PAGE
[2] => ACCESS_TOURSCHED_PAGE
[3] => ACCESS_WORKSCHED_PAGE
[4] => ACCESS_RESOURCES_LINKS
[5] => ACCESS_PMTOOL_PAGE
[6] => ACCESS_TOOLSTOOL_PAGE
[7] => ACCESS_SHOPTOOLLIST_PAGE
[8] => ACCESS_TOOLINVENTORY_PAGE
[9] => ACCESS_MANAGETOOLLIST_PAGE
[10] => ACCESS_TOOLREPORTS_PAGE
[11] => ACCESS_JOBSLIST_LINKS
[12] => MAIN_TAB_TOOLSTOOL
[13] => ADMIN_TAB_PODMANAGEMENT
[14] => TOOL_TAB_SHOPTOOLLIST
)
は、2番目のクエリを行うことなく、別の配列にもへのユーザーの役割の店すべてです。私は、サブクエリの別名を使用するために必要と思ったので、私はこのクエリを試してみました:
SELECT permissions.*, usersroles.role_id
FROM `permissions`
INNER JOIN (
SELECT ur.user_id, pr.perm_id, ur.role_id
FROM `user_roles` as ur
LEFT JOIN `permissions_role` as pr
ON ur.role_id = pr.role_id
WHERE ur.user_id = '$userid'
) AS usersroles ON usersroles.perm_id = permissions.id
INNER JOIN (
SELECT `perm_id`, `user_id`
FROM `permissions_user`
WHERE `user_id` = '$userid'
) AS userperms ON userperms.user_id = usersroles.user_id
AND userperms.perm_id = permissions.id
と、上記のコードのようなコードを使用して...
<?php
$user_perms = array();
$user_roles = array();
if(mysql_num_rows($query) > 0):
while($result = mysql_fetch_array($query):
$user_perms = $result('name');
$user_roles = $result('role_id');
endwhile;
endif;
?>
...私はこれを取得します警告:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given
しかし、私はprint_r($user_roles);
したいと、このような出力を生成します:
Array (
[0] => administrator
[1] => humanresources
[2] => podmanager
)
誰もが私が間違っているのを教え、または私は配列にクエリから必要なデータを取得するためのより良い方法を提案することはできますか?
EDIT:慎重に検討した後、ImreLが提案するように2つのクエリを使用するようにコードを変更しました。生成されたコードはうまく動作し、素早く実行されます。私は使用した最終コードを表示するために私の答えを編集し、2つのクエリをどのように使用しているかを示すサポートコードを追加しました。 ImreLに大きな感謝!
ニース図:)どのようなツールを使用すると、それを作成するために使用しましたか? –
私はMicrosoft Accessを使用しました...テーブルを作成し、関係をセットアップしてから、デザインビューに行き、グラフィックスプログラムでスクリーンショットを撮りました。 –
@Neil私の投稿を編集し、図を追加していただきありがとうございます! :) –