簡體   English   中英

如何在MySQL中基於3個聯接表基於條件創建查詢

[英]How to create a query based on condition with 3 joined tables in MySQL

當嘗試使用以下數據表創建特定查詢時,我有些困惑:

**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 Join可以獲取表中的數據,我很好。 但是,我需要獲取/管理某些信息,但我對此感到有些發瘋。 我已經花了很多小時,才發現頭疼。

我的問題是有關如何基於CATEGORY在單個查詢中構建以獲取常用的引薦數據 (例如,內容管理員在“類別”字段中選擇“手機”時,他們將獲得有關該類別的常用“數據表信息”,例如品牌,顏色,屏幕尺寸等。只需選擇其類別歸因),然后創建一個類似的查詢即可按常用歸因值(即常用屏幕尺寸)突出顯示或排序。

在一個查詢中?

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;

內部選擇用於根據條件“手機”獲取正確的product_id。 其他用於填充所有詳細信息的值。 為此,第一個JOIN是product_specs的自JOIN以獲取所有數據,以下兩個聯接用於獲取它們的字符串值。

順便說一句: product_specs.referral_data_id列是多余的,可以/應該將其刪除

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM