Php 根据特定的列值,通过连接过滤两个表之间的MySQL记录

Php 根据特定的列值,通过连接过滤两个表之间的MySQL记录,php,mysql,sql,join,Php,Mysql,Sql,Join,最近我一直在编写一个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.

最近我一直在编写一个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
选择不同的表2。*,
表1*

从表2中加入表2中的表2.FileLevel我不确定我是否完全理解这个问题,但这是我能理解的。您有一个返回所有上载文件的查询。现在,您希望筛选该列表,因此根据用户的权限级别,它有时显示的结果较少。请注意,此用户是网站上的活动用户,不一定是上载文件的同一用户,因此此条件不适用于查询的
表1

一个常见的解决方案是使用一个会话变量来存储当前用户的id以及可能的其他信息

$_SESSION['user'] = 'somebody';
$_SESSION['permissionLevel'] = 3;
如果局部变量中没有
permissionLevel
,则必须在
table1
表中加入两次,一次查找上载者,一次查找当前用户的权限级别。您的原始查询中也有输入错误。以下内容将为您提供两个用户

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 
选择*
来自表2
加入table1上传程序,其中table2.UploadUsername=table1.Username

加入table1 currentuser,其中table2.PersmissionLevel您提到使用PermissionLevel作为变量,这让我思考了一下,经过一点修改后,我实现了这一点<代码>从文件级别为的文件中选择*