UPDATE複雜的排序功能,Opencart的
我的最終目標是通過內部產品的到期日期類別進行排序。因此,產品類別最接近到期的類別將首先排到最後。感謝Greg,請參閱問題底部的完整答案。
/UPDATE
這個工程除了第二行精(SELECT MIN(date_expires ...如何改寫這一行的任何想法
SELECT c.category_id,
name,
c.image,
description,
(SELECT MIN(date_expires)
FROM product
WHERE date_expires >= NOW() AND
p.product_id = p2c.product_id) AS expiring
FROM category c
LEFT JOIN category_description cd
ON (c.category_id = cd.category_id)
LEFT JOIN product_to_category p2c
ON (c.category_id = p2c.category_id)
LEFT JOIN product p
ON (p2c.product_id = p.product_id)
WHERE c.parent_id = 0 AND c.status = '1'
GROUP BY c.category_id
ORDER BY expiring
一些樣本數據:
category:
category_id = 62
category_id = 64
category_id = 63
product_to_category:
product_id = 43 category_id = 62
product_id = 50 category_id = 63
product_id = 56 category_id = 63
product_id = 58 category_id = 62
product_id = 59 category_id = 63
product_id = 60 category_id = 63
product_id = 61 category_id = 63
product_id = 62 category_id = 63
product_id = 63 category_id = 64
product:
product_id = 43 date_expires = 2012-07-11 20:35:00
product_id = 50 date_expires = 2012-06-29 00:00:00
product_id = 56 date_expires = 2012-07-13 00:00:00
product_id = 58 date_expires = 2012-07-26 15:01:00
product_id = 59 date_expires = 2012-07-16 14:12:00
product_id = 60 date_expires = 2012-07-18 08:15:00
product_id = 61 date_expires = 2012-08-02 13:04:00
product_id = 62 date_expires = 2012-08-24 00:00:00
product_id = 63 date_expires = 2012-07-12 19:16:00
ANSWER 我最終的目標是得到
SELECT c.category_id, minDateExpires.Expiring,
CASE WHEN Expiring > 1 THEN 1 ELSE 2 END as available
FROM category c
LEFT JOIN product_to_category p2c ON (c.category_id = p2c.category_id)
LEFT JOIN product p ON (p2c.product_id = p.product_id)
LEFT JOIN (
SELECT MIN(date_expires) AS expiring, category_id FROM product p join product_to_category p2c on p2c.product_id = p.product_id WHERE date_expires >= GETDATE() GROUP BY category_id
) minDateExpires on p2c.category_id = minDateExpires.category_id
ORDER BY available, expiring
如果您正在尋找此爲Opencart的特別是和你使用的是分類模塊然後進入目錄/模型/目錄/ category.php和編輯功能getCategoriesPag()來:
public function getCategoriesPag($data) {
$query = $this->db->query("SELECT c.category_id, name, c.image, description, minDateExpires.Expiring, CASE WHEN Expiring > 1 THEN 1 ELSE 2 END as available FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (c.category_id = p2c.category_id) LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id) LEFT JOIN (SELECT MIN(date_expires) AS expiring, category_id FROM product p JOIN product_to_category p2c on p2c.product_id = p.product_id WHERE date_expires >= NOW() GROUP BY category_id) minDateExpires on p2c.category_id = minDateExpires.category_id WHERE c.parent_id = 0 AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND c.status = '1' GROUP BY c.category_id ORDER BY available, Expiring, c.sort_order");
return $query->rows;
}
您需要將自己的date_expires字段添加到數據庫和後端管理面板。
什麼不工作有關問題的路線?你有什麼錯誤嗎?你有什麼嘗試?這應該是DBMS不可知論的,還是針對特定的DBMS? – Jim 2012-07-12 23:53:47
@Jim不知道DBMS是什麼,它是從Opencart上基於PHP的網站搜索。我沒有遇到任何錯誤,但我也沒有從特定行中得到任何結果。我已經嘗試了所有我能用這種方法想到的事情,並且通過使用CASE,也沒有取得任何成功。 – Cleverbot 2012-07-13 00:04:18