[英]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.