Php 从多个mysql表中获取数据。

Php 从多个mysql表中获取数据。,php,mysql,Php,Mysql,我有两个数据库表 一个叫做文件。看起来像这样 文件 USERID FILENAME DEFAULT NETWORKID 88 hello 1 10293 9 bob 43 opener 1 10293 43 facepa 9 closer 第二表用户网络 USERID NETWORKID 9 10293 43 我

我有两个数据库表

一个叫做文件。看起来像这样

文件

USERID FILENAME DEFAULT NETWORKID
88      hello      1      10293
9       bob               
43      opener     1      10293
43      facepa            
9       closer           
第二表用户网络

USERID NETWORKID 
9       10293
43
我当前的sql查询是

SELECT file,filename,filetype,size, forename, files.userID
FROM (`files`)
LEFT JOIN users ON users.userID = files.userID
WHERE files.userID = $userID ORDER BY id DESC
这当前获取userid为9的文件列表

如您所见,我的userid
9
也在usernetworks表中,我使用网络id 10293连接

我还想在查询中包括默认值为1且网络id与usernetworks表中的任何一行(使用我的userID)匹配的行

因此,当userid连接到networkid时,也会显示这些结果以及带有userid和没有网络id的结果


非常感谢您的帮助。

如果您想根据网络id获取数据,请使用此查询

SELECT file,filename,filetype,size, forename, files.userID
FROM files a, network b
WHERE a.networkID = b.networkID ORDER BY id DESC

希望这将解决您的问题

如果您希望根据网络id获取数据,请使用此查询

SELECT file,filename,filetype,size, forename, files.userID
FROM files a, network b
WHERE a.networkID = b.networkID ORDER BY id DESC

希望这将解决您的问题

如果我正确阅读了您的逻辑,那么我们可以实现它,首先将
文件
左键连接到
用户
,条件是用户与您的用户ID匹配。然后,我们可以再次左键连接到
用户
,这次是在文件记录为默认的条件下,网络ID匹配,匹配的用户也是您的用户

SELECT f.*
FROM files f
LEFT JOIN users u1
    ON f.userID = u1.userID AND f.userID = $userID
LEFT JOIN usernetworks u2
    ON f.default = 1 AND
       f.networkid = u2.networkid AND u2.userID = $userID
WHERE
    u1.userID IS NOT NULL OR u2.userID IS NOT NULL;

实际上,如果您不打算从
users
表中选择任何列,那么您可能会完全忽略该表的连接。我保留了它,因为它与您问题中的原始查询是正确的。

如果我正确阅读了您的逻辑,那么我们可以通过先将
文件
左键连接到
用户
,条件是用户与您的用户ID匹配。然后,我们可以再次左键连接到
用户
,这一次,在文件记录为默认值的情况下,网络ID匹配,并且匹配的用户也是您的用户

SELECT f.*
FROM files f
LEFT JOIN users u1
    ON f.userID = u1.userID AND f.userID = $userID
LEFT JOIN usernetworks u2
    ON f.default = 1 AND
       f.networkid = u2.networkid AND u2.userID = $userID
WHERE
    u1.userID IS NOT NULL OR u2.userID IS NOT NULL;

实际上,如果您不打算从
users
表中选择任何列,那么您可能会完全忽略该表的连接。我保留了它,因为它与您问题中的原始查询相同。

我知道您需要您的文件以及网络中的默认文件:

SELECT userid, filename, networkid 
FROM files
WHERE (userid = $userid 
OR (default = 1 AND networkid in (
   select networkid from network_users where userid = $userid)))
AND filename like :name

SQL中提到的字段不在架构描述中。

我知道您希望在网络中添加文件和默认文件:

SELECT userid, filename, networkid 
FROM files
WHERE (userid = $userid 
OR (default = 1 AND networkid in (
   select networkid from network_users where userid = $userid)))
AND filename like :name


SQL中提到的字段不在架构描述中。

我不知道我的答案是否正确,但我知道这不可能正确。您至少缺少另一个连接条件,可能是整个连接。而且你的连接语法已经过时,你应该使用显式连接。对不起,蒂姆,可能是我没有正确理解你的问题。你能再给我简要介绍一下吗?关于加入,我认为这并不是过时的。顺便说一下,谢谢。我不知道我的答案是否正确,但我知道这不可能是正确的。您至少缺少另一个连接条件,可能是整个连接。而且你的连接语法已经过时,你应该使用显式连接。对不起,蒂姆,可能是我没有正确理解你的问题。你能再给我简要介绍一下吗?关于加入,我认为这并不是过时的。顺便说一下,谢谢。差不多了。两个问题-加入用户u2,这应该是usernetworks吗?我运行了上面的查询,将userID更改为43,它仍然返回默认值为1的结果,但是user43没有连接到networkid10293,因此它不应该显示该文件。基本上,用户可以看到设置为默认值1的文件,以及他们连接到的任何networkid。很抱歉把事情弄得这么复杂understand@ScottO“康纳,重新加载你的页面。我几乎错过了第三个加入条件。两个问题-加入用户u2,这应该是usernetworks吗?我运行了上面的查询,将userID更改为43,它仍然返回默认值为1的结果,但是user43没有连接到networkid10293,因此它不应该显示该文件。基本上,用户可以看到设置为默认值1的文件,以及他们连接到的任何networkid。很抱歉把事情弄得这么复杂understand@ScottO“康纳,重新加载你的页面。我缺少第三个联接条件。您应该在问题中也包括
用户
表的数据。您应该在问题中也包括
用户
表的数据。这看起来像是我想要的。但获取错误:错误代码:1064。您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第4行中使用接近“=1”和networkid的正确语法(从usernetworks中选择networkid,其中userid='9')。这假定我们不需要加入
用户,这可能不是真的。请尝试使用files.default,default可能是一个有效的保留字。我试图添加这一行和文件名,比如“%”“$\u GET['query']”“%”,但一直告诉我我把它放错地方了,我想把它放在哪里(放在where语句中),这看起来像是我想要的。但获取错误:错误代码:1064。您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第4行中使用接近“=1”和networkid的正确语法(从usernetworks中选择networkid,其中userid='9')。这假定我们不需要加入
用户,这可能不是真的。请尝试使用files.default,default可能是一个有效的保留字。我试图添加这一行和文件名,比如“%”“$\u GET['query']”“%”,但一直告诉我我把它放错地方了,有没有想法把它放在哪里(放在where语句中)