2012-04-14 99 views
0

我的第一篇文章在這裏。對來自其他表格的值進行排序php

我想將我的產品表中顯示的值與我的products_categories表中的值進行排序。

我的產品表中包含以下字段:

id | psku | pname | pdescription 

我products_categories表具有以下字段:

id | psku | subcategory | orderid 

我建立這個網站是一個小型的網上商店,其中包含幾個子類。此時的設置允許我將1個產品添加到多個類別。

例如,產品SKU#6001將被列在2個子類別中,化妝品&睫毛。我會再2在我products_subcategories表項,像這樣:

id | psku | subcategory | orderid 
1 | 6001 | cosmetics | 1 
2 | 6004 | eyelashes | 1 
3 | 6003 | cosmetics | 2 
4 | 6011 | cosmetics | 3 
5 | 6020 | eyelashes | 2 
6 | 6045 | cosmetics | 4 

我目前使用下面的查詢,以顯示每個子類數據:

SELECT * FROM products LEFT JOIN products_subcategories 
ON products.psku = products_subcategories.psku 
WHERE products.psku IN ('6001','6003','6011','6020','6045') 
GROUP BY e2o_products_subcategories.psku 
ORDER BY e2o_products_subcategories.orderid ASC 

這應該顯示我的結果是這樣:

Cosmetics: 
PSKU 6001 
PSKU 6003 
PSKU 6011 
PSKU 6045 

eyelashes: 
PSKU 6004 
PSKU 6020 

它似乎沒有工作。嘗試了一些其他組合,結果最差。該產品顯示,但不會按排序

有人會有一個可能的解決方案來解決這個問題。如果需要,我可以提供樣本數據。

謝謝。

+0

備註:你可以提高性能與b etter標準化。爲了您的理智,以及。將'products.id'更改爲'products.product_id',將'products_categories.id'更改爲'products_categories。product_category_id'和'product_categories.pksu'到'product_categories.product_id'。然後加入product_id而不是pksu。 – 2012-04-14 07:03:52

+0

您的訂單中的'e2o_'前綴和group by子句是什麼? – kjones 2012-04-14 07:04:15

+0

嗨,抱歉的前綴。這是來自舊代碼的剩餘部分。忘了刪除。感謝您的解釋。這樣做是有道理的。更好地理解。 – daespo 2012-04-14 08:06:41

回答

1

我看了一下你創建的sampledata.php文件。我正在努力弄清楚你正在嘗試做什麼。你爲什麼運行兩個查詢?當然,您可以通過一個查詢來獲得相同的結果。

你的第一個查詢將返回pskus你,然後傳遞到第二個查詢列表 -

SELECT psku, subcategory 
FROM products_subcategories 
WHERE subcategory = 'cosmetics' 

+------+-------------+ 
| psku | subcategory | 
+------+-------------+ 
| 6018 | cosmetics | 
| 6017 | cosmetics | 
| 6022 | cosmetics | 
| 6025 | cosmetics | 
+------+-------------+ 

第二個查詢是那麼 -

SELECT DISTINCT products.* 
FROM e2o_products 
INNER JOIN e2o_products_subcategories 
    ON e2o_products.psku = e2o_products_subcategories.psku 
WHERE e2o_products.pstatus = '1' 
AND e2o_products.psku IN (6018,6017,6022,6025) 
GROUP BY e2o_products.psku 
ORDER BY e2o_products_subcategories.dsporder DESC 

既然你只檢索產品表中的字段,你可以做 -

SELECT p.* 
FROM products p 
INNER JOIN products_subcategories ps 
    ON p.psku = ps.psku 
WHERE p.pstatus = 1 
AND ps.subcategory = '$subcat' 
ORDER BY ps.dsporder DESC 
+0

美麗!正是我想要的。感謝您使查詢更短,更清潔。神奇的解決方案,非常快速的響應。也感謝所有其他參與者。 乾杯! – daespo 2012-04-14 12:23:46

1

你需要訂購的子類的名頭,所以

SELECT * FROM products 
    LEFT JOIN products_subcategories 
    ON products.psku = products_subcategories.psku 
WHERE products.psku IN ('6001','6003','6011','6020','6045') 
ORDER BY e2o_products_subcategories.subcategory ASC, 
     e2o_products_subcategories.orderid ASC 

注意我還刪除您GROUP BY與它,你將只能得到每PSKU在結果返回一次,你不會自信地能夠預測在多個類別中將爲PSKU返回哪個子類別。如果每個產品在子類別表中都有一個條目,則可能需要將LEFT JOIN更改爲INNER JOIN。

+0

@daespo爲什麼產品沒有它多次顯示?你能舉一個例子嗎?這聽起來不對。它應該顯示與其所屬類別相同的次數。 – liquorvicar 2012-04-14 08:13:00

+0

嗨。如果我張貼一些樣本數據會有幫助嗎? 測試網站是:http://e2o.aiiic.com 如果你看看子類別,你可能會看到我想要完成的。 – daespo 2012-04-14 09:35:37

+0

@daespo是的,絕對發佈一些示例數據。 – liquorvicar 2012-04-14 09:44:50

相關問題