Php 在MySQL中比较三个表中的一个答案
我已经使用MySQL一段时间了,最近才发现需要更好地管理我的数据(MOAR数据!) 我遇到的问题是: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 很可能我
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 |
+---------------------+