0

最近、ユーザー情報とファイル情報を 2 つの別々のテーブルに格納して、データベースから情報を読み取る PHP/MySQL スクリプトに取り組んでいます。

以下は、テーブルのスキーマです。

表1

UID | Username | PermissionLevel
1   | First    | 1
2   | Next     | 3
3   | More     | 2

表2

FID | Filename | FileLevel | UploadUsername
1   | file.txt | 2         | First
2   | hand.mp4 | 1         | First
3   | 1245.dds | 1         | Next
4   | beta.sql | 3         | More

このメッセージでは、パスワードの列とファイルのタイトル/説明の列を省略しました。これは、私が達成しようとしている結果には関係がないためです。

これまでのところ、このSQLコードを思いつきました

SELECT DISTINCT table2.*, 
table1.*
FROM table2 JOIN table2 ON table2.FileLevel <= table1.PermissionLevel
WHERE table2.UploadUsername = table1.Username 
ORDER BY FID DESC LIMIT 7

これにより、必要な適切なリストが生成されますが、表示されるコンテンツのレベルはフィルタリングされません。

PermissionLevel が 1 のユーザーは、FileLevel が 1 のファイルのみを表示する必要があります。PermissionLevel が「2」のユーザーは、FileLevel が 2 と 1 の両方のファイルを表示できます。

しかし、現段階では、ファイル/アクセス許可レベルに関係なく、すべての結果を表示したいだけのようです。

私はこの問題で数日間立ち往生しており、これを回避することができないようです. 見落としているかもしれない単純なことかもしれませんが、新鮮な目が私を助けてくれることを願っています.

4

1 に答える 1

0

質問を完全に理解しているかどうかはわかりませんが、これが私ができることです。アップロードされたすべてのファイルを返すクエリがあります。そのリストをフィルタリングする必要があるため、ユーザーのアクセス許可レベルによっては、表示される結果が少なくなることがあります。このユーザーは Web サイトのアクティブなユーザーであり、必ずしもファイルをアップロードしたユーザーと同じではないことに注意してください。そのため、この条件はtable1クエリのテーブルでは機能しません。

これに対する一般的な解決策は、現在のユーザーの ID と、場合によってはその他の情報を格納するセッション変数を用意することです。

$_SESSION['user'] = 'somebody';
$_SESSION['permissionLevel'] = 3;

permissionLevelローカル変数を持っていない場合は、table1テーブルに2 回参加する必要あります。元のクエリにもタイプミスがあります。以下は両方のユーザーを提供します

SELECT *
FROM table2
JOIN table1 uploader WHERE table2.UploadUsername=table1.Username
JOIN table1 currentuser WHERE table2.PersmissionLevel<=table1.PermissionsLevel AND users.Username='$_SESSION[user]'
ORDER BY FID DESC 
于 2013-04-19T22:07:00.490 に答える