1

これはおそらく単純なことだと思いますが、私は自分がやりたいことを行うための最も効果的な方法を考えようとしています。

私が持っているのは、マネージャーが自分の部門内のユーザーを編集できるページです。これは最も基本的な方法で正常に機能します。クエリを実行して、すべてのユーザーを返します。WHERE Department = managerdepartment

これにより、同じ部門内のすべてのユーザーが返されます。私がやりたいのは、それを拡張することです。一部のマネージャーは複数の部門を担当しており、さまざまな部門のユーザーを編集できるようにしたいと考えています。

私の考えは、ユーザー用のエントリを含む部門テーブルを作成することでした。次に、各部門の列があり、マネージャーが担当する各部門の値を「はい」に設定します。

トリッキーな部分は、その情報に基づいてクエリを調整することです。行をクエリするための最良の方法は何だと思いますか。値が「はい」のフィールドごとに、クエリのオプションとして部門を追加します。

私はそれをできた:

$row = mysql_fetch_assoc($result);
If($row['dept1'] == 'Yes') {
    $query. = " OR Department=dept1";
}
if($row['dept2'] == 'Yes') {
    $query. = " OR Department=dept2";
}

これは私が想像するように機能しますが、部門を追加または削除する場合などは、手動で部門にアクセスしてハードコーディングする必要があることを意味します。

よりエレガントな解決策はありますか?

4

2 に答える 2

2

より良い解決策はないと思いますが、よりクリーンな解決策は次のとおりです。

  WHERE department IN (dept1,dept2,dept3...)

次に、含める部門の配列を作成し、その配列を次のようにクエリの「IN()」句にimplode()します。

    ... IN (implode(",", $array))
于 2012-11-26T14:57:35.630 に答える
2

より良い方法は、部門、マネージャーのマッピングを持つテーブルを持つことです。

次に、クエリを次のように変更できます

WHERE department in (SELECT dept_id FROM table WHERE manager_id = 'something')
于 2012-11-26T14:58:23.990 に答える