如何在MySQL中使用3个连接表创建基于条件的查询

时间:2013-12-09 18:15:59

标签: mysql join database-relations

尝试使用以下数据表创建特定查询时,我有点困惑:

**table 1 - referral_data:**

ID      attribution_name
------------------------
1       Category
2       Brand
3       Size
4       Color
5       Processor
6       OS
7       Screen Size
 .....

**table 2 - referral_values:**

ID     ref_data_id          attribution_value
---------------------------------------------
1      1                    Cell Phones
2      1                    Tablets
3      1                    Laptops
4      1                    Computers
5      1                    LCD Monitors
6      2                    Nokia
7      2                    Motorola
8      2                    Samsung
9      2                    Lenovo
10     2                    Philips
11     3                    10x10x11
12     3                    100x100x20
13     3                    10x200x200
14     3                    2x2x3
15     4                    Black
16     4                    Cyan
17     4                    Magenta
18     4                    White
19     4                    Blue
20     5                    ARM Cortex A11
21     5                    Snapdragon 11
22     5                    Intel I3 XXXXX
23     5                    Exynos XXXX
24     6                    Android 4.1
25     6                    Android 3.0
26     6                    Windows Phone 3
27     6                    Windows 8 Professional
28     7                    18.5"
29     7                    11.8"
30     7                    7.0"
31     7                    5.0"
32     7                    3.5" 
 ......

**table 3 - product_specs:**

ID   product_id    referral_data_id    referral_value_id
--------------------------------------------------------
1    1050          1                   1                 // <-- Product 1 - Category: Cell Phones
1    1050          2                   8                 // <-- Product 1 - Brand: Samsung
1    1050          4                   19                // <-- Product 1 - Color: Blue
1    1050          6                   24                // <-- Product 1 - Processor: Exynos XXXX
1    1050          7                   30                // <-- Product 1 - Screen Size: 7.0"
1    1068          1                   4                 // <-- Product 2 - Category: Computers
1    1068          2                   9                 // <-- Product 2 - Brand: Samsung
1    1068          6                   22                // <-- Product 2 - Processor: Intel Core I3
1    1068          7                   28                // <-- Product 2 - Screen Size: 18.5"
 ......

这些表格包含我计划在电子商务网站中使用的“产品目录”。

这旨在优化“客户端”搜索功能并组织内部产品数据信息,将“内容管理员”任务转变为最简单,最简单的环境。 (例如,让他们选择“已输入”的数据值,而不是重新输入“已输入的数据”,避免重复的数据或拼写错误)。

根据“表格动态”,“内容管理员”可以选择向其中添加新的归因数据(产品特征)和/或新的归因值(归因值)。

信息:名为“product_id”的产品代码字段位于表关系之外,这仅用于创建链接以将信息附加到它们所属的产品。

一般来说,SQL连接要在表上获取数据,我很好。但是我需要得到/管理某些信息,我会变得疯狂。我花了很多时间才发现头疼。

我的问题是如何在单个查询中构建基于CATEGORY的常用引荐数据。  (当内容管理员选择,例如,“类别”字段中的“手机”时,他们将获得关于该类别的常用“数据表信息”,如品牌,颜色,屏幕尺寸等....只需选择他们的类别归因)并创建一个类似的查询,以突出显示或按常用的归因值(即常用的屏幕尺寸)排序。

1 个答案:

答案 0 :(得分:0)

在单个查询中?

SELECT ps2.product_id,rv2.attribution_value,rd.attribution_name 
  FROM ((
      (select ps.* from product_specs ps JOIN referral_values rv 
        ON rv.ref_data_id=ps.referral_value_id 
        WHERE rv.attribution_value = 'Cell Phones'
      ) ps1 
    JOIN product_specs ps2 on ps1.product_id=ps2.product_id) 
  JOIN referral_values rv2 ON ps2.referral_value_id = rv2.id)
JOIN referral_data rd ON rd.id = rv2.ref_data_id;

内部选择用于根据标准&#39;手机&#39;获得正确的product_id。其他用于填充此值以及所有详细信息。为此,第一个JOIN是product_specs的自JOIN以获取所有数据,以下两个连接用于获取它们的字符串值。

顺便说一下:列product_specs.referral_data_id是多余的,可以/应该删除