Php 在MySQL中比较三个表中的一个答案

Php 在MySQL中比较三个表中的一个答案,php,mysql,sql,Php,Mysql,Sql,我已经使用MySQL一段时间了,最近才发现需要更好地管理我的数据(MOAR数据!) 我遇到的问题是: Table1: users - id Table2: companies - companyid - companyname Table3: customers - customerid - companyid 我试图质疑以下几点 我有用户ID,我需要使用该ID从使用customerid的客户处获取companyid,并根据客户中指定的companyid返回companyname 很可能我

我已经使用MySQL一段时间了,最近才发现需要更好地管理我的数据(MOAR数据!)

我遇到的问题是:

Table1: users
- id

Table2: companies
- companyid
- companyname

Table3: customers
- customerid
- companyid
我试图质疑以下几点

我有用户ID,我需要使用该ID从使用customerid的客户处获取companyid,并根据客户中指定的companyid返回companyname

很可能我在这件事上做得非常错误。我知道随着数据的增长,最终数据将变得很难用肉眼读取。我关心的是是否有能力将客户与企业联系起来


如果您有任何建议,或者有更好的策略,或者认为我应该将这些信息添加到用户表中,请告诉我。

首先,您需要了解什么是标准化:

数据库表并不意味着“用眼睛读取”。我很确定您现在处理的是一个非常小的数据库,但是想象一下,将来您处理的是数千个具有数百万行的表,“目视检查”将不再有效

一个简单的连接将提供您所需要的:

SELECT t2.companyname 
FROM table1 t1, table2 t2, table3 t3
WHERE t1.id = t3.customerid 
AND t3.companyid = t2.company id
AND t3.customerid = (some id)  //Depends on what your purpose is, 
                               //this line can also be replaced by
                               //AND t1.id = (some id)
在您的情况下,只有当所有用户都是客户时,才可以将用户表和客户表合并为一个。但在用户表或客户表中都不能有公司信息。

代表OP发布

我通过以下方式获得了我想要的结果:

SELECT t2.companyname FROM companies t2,customers t3 WHERE t3.companyid = t2.companyid AND t3.customerid=?

我不知道我可以创建引用,这将对我非常有用。谢谢大家!

假设
customers.customerid
users.id
的值相同,这就足够了:

SELECT companies.companyname
FROM customers
LEFT JOIN companies ON customers.companyid = companies.companyid
WHERE customers.customerid = 5
这是一个

模式在左边,sql在右边

表:


查询返回:


从表2中选择公司名称t2在t2.companyid=t3.companyid其中t3.customerid=2上加入表3 t3
?用户表如何与表2或表3连接?抱歉,因为我对这个特定问题有些陌生。但是t2、t3是这些表的短引用名称吗?@Dave用户表存储所有登录凭据。副产品是一个USERID,我在公司中使用它将USERID引用到引用COMPANYNAME的COMPANYID。(旁白:我们更喜欢在答案中添加解决方案,而不是作为对问题的编辑。我刚才添加了这个作为答案,请以后自己做。关于无用海报的评论也不属于问题或答案——它们是为了与广大未来受众相关)。首先感谢您提供的有用链接。我快速浏览了概述,稍后有时间将阅读此内容。其次,我成功地使用了上面的示例。谢谢。根据您的最新编辑:用户具有多个访问级别,一些是管理员,一些是公司员工(需要此数据库的公司),还有一些是需要访问此信息的公司的员工。为了不在用户表中塞满不需要的数据,我决定做3个表。谢谢你的帮助!你为什么要将我的结果移至另一个帖子?您好@jjonesdesign-请参阅你问题下的注释。作为一个活跃的编辑器,我nd将[已解决的]注释移动到答案,这样它们就完全分开了。它被标记为“社区维基”,所以我这样做不会得到任何声誉分数。
users
+--------+
|   ID   |
+--------+
|   1    |
|   2    |
|   3    |
|   4    |
|   5    |
|   6    |
|   7    |
|   8    |
|   9    |
|   10   |
|   11   |
|   12   |
|   13   |
+--------+

companies
+------------------------------------------+
| COMPANYID     COMPANYNAME                |
+------------------------------------------+
| 5             CompAlumpany               |
| 9             Dergy Hergins LLC          |
| 3             Smergy Berg Inc.           |
| 23            Hergin Derz                |
| 7             Comperation corpany        |
| 11            Contagion Engine           |
| 31            AEther Vial                |
| 66            Necropotence               |
| 90            Lord of Atlantis           |
| 65            Snoogins                   |
| 51            Nickty-Schnickty-Schnoine  |
| 58            Take a knee                |
| 59            Coorprate                  |
+------------------------------------------+

customers
+--------------------------+
| CUSTOMERID    COMPANYID  |
+--------------------------+
| 1             5          |
| 2             9          |
| 3             3          |
| 4             23         |
| 5             7          |
| 6             11         |
| 7             31         |
| 8             66         |
| 9             90         |
| 10            65         |
| 11            51         |
| 12            58         |
| 13            59         |
+--------------------------+
+---------------------+
| COMPANYNAME         |
+---------------------+
| Comperation corpany |
+---------------------+