我試圖創建一個「eBay」風格類別菜單,當用戶從多選字段中選擇一個項目時,它將添加一個新的多選以及任何子類別,如果子類別包含子類別添加一個新的多選與子子類別。使用JOIN NULL值在數據庫中匹配列名稱
我有這個主要工作,但我在數據庫方面遇到麻煩。我有一個名爲categories
的主表,其中包含CatID
和Category
兩列。 categories
表中有三排「摩托車」,「動力運動」和「零件&配件」
當用戶選擇摩托車時,應該創建一個新的多重選擇並提出摩托車品牌。另一方面,如果用戶選擇Powersports,則應創建新的多下拉列表並列出Powersport車輛類型「Dirtbike」,「PWC」,「Snowmobile」等。選擇其中之一將帶來Powersports-> Vehicle Type- >品牌多選。
問題是我不知道如何在數據庫中正確引用所有這些信息。
例如: 主要分類(類)
+-------+---------------------+
| CatID | Category |
+-------+---------------------+
| 1 | Motorcycles |
| 3 | Parts & Accessories |
| 2 | Powersports |
+-------+---------------------+
摩托車子類別:(motorcycle_brands)
+-------+-------+-------------------------+
| CatID | SubID | SubName |
+-------+-------+-------------------------+
| 1 | 1 | American Classic Motors |
| 1 | 2 | American Ironhorse |
| 1 | 3 | Aprilia |
| 1 | 4 | Benelli |
| 1 | 5 | Big Dog |
+-------+-------+-------------------------+
電源體育子類別:(powersport_categories)
+-------+-------+--------------------------------+----+
| CatID | SubID | SubName | ID |
+-------+-------+--------------------------------+----+
| 2 | 1 | ATVs | 1 |
| 2 | 2 | Dune Buggies/Sand Rails | 2 |
| 2 | 3 | Go Karts: High-Performance | 3 |
| 2 | 4 | Personal Watercraft | 4 |
| 2 | 5 | Powersport Vehicles Under 50cc | 5 |
+-------+-------+--------------------------------+----+
所以如果我運行以下命令:
SELECT * FROM categories C
LEFT JOIN motorcycle_brands MB ON MB.CatID = C.CatID
LEFT JOIN powersport_categories PC ON PC.CatID = C.CatID
WHERE C.CatID = 1 LIMIT 5;
我得到這個:
+-------+-------------+-------------------+-------+-------+-------------------------+-------+-------+---------+------+
| CatID | Category | CatDBTable | CatID | SubID | SubName | CatID | SubID | SubName | ID |
+-------+-------------+-------------------+-------+-------+-------------------------+-------+-------+---------+------+
| 1 | Motorcycles | motorcycle_brands | 1 | 1 | American Classic Motors | NULL | NULL | NULL | NULL |
| 1 | Motorcycles | motorcycle_brands | 1 | 2 | American Ironhorse | NULL | NULL | NULL | NULL |
| 1 | Motorcycles | motorcycle_brands | 1 | 3 | Aprilia | NULL | NULL | NULL | NULL |
| 1 | Motorcycles | motorcycle_brands | 1 | 4 | Benelli | NULL | NULL | NULL | NULL |
| 1 | Motorcycles | motorcycle_brands | 1 | 5 | Big Dog | NULL | NULL | NULL | NULL |
+-------+-------------+-------------------+-------+-------+-------------------------+-------+-------+---------+------+
通知所有的NULL值在末尾。有沒有辦法擺脫這些空值?它在我的代碼中導致其他問題,因爲當它將這個數組返回到我的PHP腳本時,SubID
和SubName
數組字段爲空,因爲它與最後一組爲NULL。但是,如果我運行與上述相同的查詢替換1與2然後我得到我想要的值,因爲他們沒有被重複的列名稱重寫。
也許我正在討論這一切錯誤我打算在所有表格中爲子類別設置相同的SubID
和SubName
列,但看起來它可能會導致我的悲傷。我這樣做的原因是因爲否則我不得不根據選擇的值來編寫一個單獨的查詢,我希望基本上有一個查詢將基本上爲每個子選項執行。這裏有什麼改進嗎?
,而不是''試試你想要的具體列名的select查詢 – krishna