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

时间:2014-09-16 19:29:49

标签: php mysql sql

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

我遇到的问题是:

Table1: users
- id

Table2: companies
- companyid
- companyname

Table3: customers
- customerid
- companyid

我正在尝试查询以下内容。

我有用户ID,我需要使用它来使用customerid从客户那里获取companyid,并根据客户指定的companyid返回companyname。

我很可能会发生这种错误。据我所知,随着数据开始增长,数据最终会变得非常难以阅读。我担心的是能够将客户与企业联系起来和解除关联。

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

3 个答案:

答案 0 :(得分:1)

首先,您需要对规范化是什么有所了解:http://support.microsoft.com/kb/283878

数据库表并不意味着“通过眼睛阅读”。我很确定你现在正在处理一个非常小的数据库,但想想未来你要处理成千上万行的数千个表,“目视检查”不再适用了。

简单的连接可以满足您的需求:

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)

在您的情况下,如果所有用户也是客户,则可以将User表和Customer表合并为一个。但在用户表或客户表中都有公司信息肯定是NO。

答案 1 :(得分:1)

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

SELECT companies.companyname
FROM customers
LEFT JOIN companies ON customers.companyid = companies.companyid
WHERE customers.customerid = 5

这是 fiddle

Schema在左边,sql在右边。

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 |
+---------------------+

答案 2 :(得分:0)

代表OP发表。

我得到了我正在寻找的结果:

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

我不知道我可以创建引用,这对我来说非常有用。谢谢!