繁体   English   中英

mysql加入额外条件

[英]mysql join with extra conditions

我在php脚本中运行此查询。 我有一张纸和用户表。 如果每个文件都有所有者用户。 每个用户都有一个公司ID。 我想要的是具有相同公司ID的用户应该可以互相查看其他论文,因此我尝试通过paper_id和user_id来检查此权限。

papers
---------
id
user_id
paper_details


users
----------
user_id
company_id
user_details

要检查是否存在纸张和我在下面尝试查询的用户的结果。 进行此查询时,我只有$ user_id_variable$ paper_id_variable变量。 但是我不能在查询中的任何地方放置** $ user_id_variable **。

SELECT * FROM papers
INNER JOIN
users u on u.user_id= papers.user_id
WHERE
papers.user_id in (
  SELECT user_id FROM users WHERE users.company_id=u.company_id
)
AND papers.id = '$paper_id_variable'

编辑样本数据和预期结果:

--papers--
 id | user_id
 1  | 1


--users--
user_id | company_id
  1     | 10
  2     | 10
  3     |  11 

根据上表,预期结果应为:

when paper id = 1 and user id 1 -> result count  = 1
when paper id = 1 and user id 2 -> result count  = 1
when paper id = 1 and user id 3 -> result count  = 0

谢谢你的时间,,

您可以使用以下查询:

SELECT *
FROM papers
INNER JOIN users u on u.user_id=papers.user_id
WHERE u.company_id = (SELECT company_id FROM users WHERE user_id = '$user_id_variable')
AND papers.paper_id = '$paper_id_variable'

注意:在文件表中保存company_id可能是另一个想法。 不要忘记创建索引,不要使用诸如user_id, paper_id类的字段名。 只需使用id 与PHP变量相同,请使用$paperId instead $paper_id_variable 它们不是必须的,而是良好的实践。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM