【问题标题】:How to fetch record from multiple table in MySQL如何从 MySQL 中的多个表中获取记录
【发布时间】:2018-02-09 05:49:38
【问题描述】:

我标准化了我的 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      |             |

我做了很多尝试来达到我的结果,但都失败了。

【问题讨论】:

  • 您应该查看JOIN。但是,我建议使用供应商id(主键)作为venders_materialsvendors_cateories 表中的外键。默认情况下,数字主键不仅是唯一的和索引的,查找速度也会更快。此外,如果您在供应商名称中看到拼写错误,则无需更新多个表。
  • 如果您只是做一些研究,也有多个关于此的指南/教程。始终从进行广泛的研究开始,并在发布之前进行一些尝试。

标签: php mysql


【解决方案1】:
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

也不是很好的规范化数据库结构,首先不建议在可以连接整数时使用varchar列连接表。例如,当您可以通过vendor.id 连接时,您的“连接器”表vendors_materialsvendors_category 通过name 连接到vendor。所以你的vendors_materials 表应该是这样的:

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

vendors_category 也可以这样做。

【讨论】:

    【解决方案2】:

    尝试以下查询:

    其实你需要学习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;
    

    【讨论】:

    • 您需要正确使用“JOIN”。我已经向你展示了。如果您了解联接表,那么这对您来说很容易。
    • 是的,当然。下次我会确保这一点。我是新来的。
    • 我知道加入表格,但我没有使用加入得到准确的结果
    • 更新问题并在其中添加您的查询。以便我们查看您的尝试。
    猜你喜欢
    • 2014-01-23
    • 2022-10-04
    • 2016-08-04
    • 2011-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多