0

商品カタログあります。各項目はカテゴリの下にあります。カテゴリごとに、異なる権限 (管理者、エキスパート、ユーザー) を持つユーザーを設定できます。アイテムを追加するとき、可視性を選択します: (1) - すべての人に表示されます (2) - このアイテムが投稿されたカテゴリの管理者と専門家のみに表示されます (3) - このアイテムが投稿されたカテゴリのすべてのメンバーに表示されます(0) - すべて非表示 (作成者のみが表示可能)。

タイトルに「キーボード」という単語が含まれるアイテムが 500 個あるとします。それらのほとんどは、異なるカテゴリにあります。論文 500 の 1 つの項目のみがプライバシーを持っています - 2 (カテゴリの専門家と管理者に表示) で、カテゴリ「Logitech」の下にあります。検索で「Logitech」カテゴリ タイプ「キーボード」の管理者として検索すると、検索で 500 個のアイテムが見つかり、そのうちの 10 個が表示されるはずです。通常のユーザー (管理者や専門家ではない) が検索で「キーボード」と入力すると、検索で 499 個のアイテムが見つかり、その 499 個のアイテムのうち 10 個が表示されます。

10 個ではなく 20 個のアイテムを取得し、各アイテムのプライバシーをチェックしてから、検索結果に 10 個のアイテムのみを表示することが唯一の可能な解決策ですか? しかし、この 20 個すべてが「ユーザーに対して非表示」になるとどうなるでしょうか?

ご回答ありがとうございます。

データベース スケッチ:

1)items[id、タイトル、category_id、可視性]

2) カテゴリ:[ID、タイトル]

3) category_user[id、user_id、category_id、役割 (エキスパート、管理者、ユーザー)]

4) ユーザー[ID、名前]

4

1 に答える 1

1

このような何かがトリックを行うかもしれません:

SELECT i.*,c.*,cu.*u.*
FROM items i,categories c, category_user cu, user u
WHERE i.title LIKE '%$search%'
AND i.category_id=c.id
AND cu.category_id=c.id
AND u.id=cu.user_id
AND cu.role='expert'
AND i.visibility=1

userdata に従って cu.role と i.visibility を変更します。

于 2012-08-09T13:30:35.677 に答える