1

我的查询使用 5 个表,它们是:

categories c- categories_id and its other fields and parent_id field
categories_description cd-  categories_id and categories_name fields.
products_to_categories p2c- products_id linked to categories_id fields

products p- products_id field and other details
specials s- specials_status and products_id

我有这个 MySQL 查询:

SELECT c.categories_id, cd.categories_name, c.parent_id 
FROM categories_description cd, categories c 
LEFT JOIN products_to_categories p2c on p2c.categories_id = c.categories_id 
LEFT JOIN products p ON p.products_id = p2c.products_id 
LEFT JOIN specials s ON p.products_id = s.products_id 
and s.specials_status = '1' 
WHERE c.categories_id = cd.categories_id and cd.language_id= 4 
and (c.parent_id = 0 OR c.parent_id = 1059 ) 
GROUP BY c.categories_id 
ORDER by sort_order, cd.categories_name

获取数组后,这将给出结果:

[1059] => Array
    (
        [1109] => Name of 1109
        [1323] => Name of 1323
        [1324] => Name of 1324
        [1322] => Name of 1322
        [1142] => Name of 1142
    )

[0] => Array
    (
        [1725] => Name of 1725
        [1077] => Name of 1077
        [95] => Name of 95
        [46] => Name of 46
        [96] => Name of 96
        [1059] => Name of 1059
        [1084] => Name of 1084
        [1386] => Name of 1386
        [1000] => Name of 1000
    )

我无法弄清楚如何排除没有有效特价商品的类别(在本例中为 1322)。将 LEFT JOIN 替换为 JOIN:

SELECT c.categories_id, cd.categories_name, c.parent_id 
FROM categories_description cd, categories c 
JOIN products_to_categories p2c on p2c.categories_id = c.categories_id 
JOIN products p ON p.products_id = p2c.products_id 
JOIN specials s ON p.products_id = s.products_id 
and s.specials_status = '1' 
WHERE c.categories_id = cd.categories_id and cd.language_id= 4 
and (c.parent_id = 0 OR c.parent_id = 1059 ) 
GROUP BY c.categories_id 
ORDER by sort_order, cd.categories_name

将为子类别提供正确的结果,但会删除我的主要类别:

[1059] => Array
    (
        [1109] => Name of 1109
        [1323] => Name of 1323
        [1324] => Name of 1324
        [1142] => Name of 1142
    )

尝试过的子查询:

SELECT c.categories_id, cd.categories_name, c.parent_id 
FROM categories_description cd, categories c 

JOIN ( select c.categories_id, cd.categories_name, c.parent_id FROM categories_description cd, categories c 

JOIN products_to_categories p2c on p2c.categories_id = c.categories_id 
JOIN products p ON p.products_id = p2c.products_id 
JOIN specials s ON p.products_id = s.products_id 
and s.specials_status = '1' 
WHERE c.categories_id = cd.categories_id  and cd.language_id= 4 and c.parent_id = 1059

 ) derived

WHERE c.categories_id = cd.categories_id and cd.language_id= 4 
and (c.parent_id = 0 OR c.parent_id = 1059 ) 
GROUP BY c.categories_id 
ORDER by sort_order, cd.categories_name

仅给出主要类别:

[0] => Array
    (
        [1725] => Name of 1725
        [1077] => Name of 1077
        [95] => Name of 95
        [46] => Name of 46
        [96] => Name of 96
        [1059] => Name of 1059
        [1084] => Name of 1084
        [1386] => Name of 1386
        [1000] => Name of 1000
    )
4

0 回答 0