如何从MySQL中的多个表中获取记录

时间:2018-02-09 05:49:38

标签: php mysql

我规范化我的MySQL数据库,这使我无法获取准确的数据,实际上我需要获取有关供应商的详细信息。我有5张桌子。第一个表是"供应商"我有供应商基本信息,如姓名,电子邮件,地址如下所示:

|     id     |     name         |      email        |   address   |
|------------|------------------|----------------------------------
|     1      |    Haris         |  Haris@gmail.com  | Abcd Efgh   |
|------------|------------------|----------------------------------
|     2      |    John          |  john@gmail.com   | Abcd Efgh   |
|------------|------------------|----------------------------------
|     3      |    Chris         | chris@gmail.com   | Abcd Efgh   |

第二张表"材料"我有一个材料列表,其中我有两个列id和材料,如下所示:

|     id     |     materials    |     
|------------|------------------|
|     1      |      Iron        |  
|------------|------------------|
|     2      |    Plastic       |  
|------------|------------------|
|     3      |     Steel        | 

第三表是"类别"我在其中列出了类别ID和类别,如下所示:

|     id     |    categories    |     
|------------|------------------|
|     1      |      chair       |  
|------------|------------------|
|     2      |      Table       |  
|------------|------------------|
|     3      |      Glass       | 

在名为" vendors_materials"的第四个表中我有供应商ID,供应商名称和材料代码。

|     id     |     name         |    material_cod   |   
|------------|------------------|--------------------
|     1      |    Haris         |           1       | 
|------------|------------------|--------------------
|     1      |    Haris         |           2       | 
|------------|------------------|--------------------
|     3      |    Chris         |           1       | 

并在最后的第五个表中命名为" vendors_category"我有供应商ID,供应商名称和类别代码。

|     id     |     name         |    category_cod   |   
|------------|------------------|--------------------
|     2      |    John          |           1       | 
|------------|------------------|--------------------
|     2      |    John          |           2       | 
|------------|------------------|--------------------
|     1      |    Haris         |           1       | 

我想了解供应商的详细信息以及如下所示的材料和类别:

|  id |  name    |      email        |   address   | material    | category    |
|-----|----------|-------------------|-----------------------------------------
|  1  |  Haris   |  Haris@gmail.com  | Abcd Efgh   | Iron plastic|  Chair
|-----|------------------|-----------------------------------------------------|
|  2  |  John    |  john@gmail.com   | Abcd Efgh   |             | Chair table
|-----|------------------|-----------------------------------------------------|
|  3  |  Chris   | chris@gmail.com   | Abcd Efgh   |   Iron      |             |

我已经做了很多努力来实现我的成绩但却失败了。

2 个答案:

答案 0 :(得分:0)

尝试以下查询:

实际上你需要学习在SQL中使用JOIN。如果你学到了这个东西,那么你就会很难做出难以理解的问题。

作为参考,您可以继续:SQL Joins

SELECT vendor.name,
       vendor.email,
       vendor.address,
       materials.materials,
       categories.categories
FROM vendor
JOIN materials
JOIN categories
JOIN vendors_materials
JOIN vendors_category ON materials.id = materials.material_cod
AND categories.id = vendors_category.material
AND materials.id = vendor.id
AND vendor.id = categories.id
GROUP BY name;

答案 1 :(得分:0)

SELECT 
vendor.name,
vendor.email,
vendor.address,
materials.materials AS material,
categories.categories AS category
FROM vendor 
INNER JOIN vendors_materials ON vendor.name = vendors_category.name
INNER JOIN categories ON vendors_category.category_cod = categories.id
INNER JOIN vendors_materials ON vendors_materials.name = vendor.name
INNER JOIN materials ON materials.id = vendors_materials.material_code

它也没有很好的规范化数据库结构,首先,当你可以用int连接时,不建议连接具有varchar列的表。例如,当vendors_materials连接时,您的“连接器”表格vendors_categoryvendorname vendor.id连接。所以你的vendors_materials表应该是这样的:

|     id     |     vendor_id    |    material_cod   |   
|------------|------------------|--------------------
|     1      |    1             |           1       | 
|------------|------------------|--------------------
|     1      |    1             |           2       | 
|------------|------------------|--------------------
|     3      |    3             |           1       | 

如果是vendors_category,您也可以这样做。