类别和子类别项目的菜单



我有2个数据库表,类别和子类别与以下字段:

category table     -  category_id, category_name, status
subcategory table  -  subcategory_id, subcategory_name, category_id, status

subcategory.category_idcategory.category_id相关

我需要创建一个具有类别和子类别项的菜单。where category.status and subcategory.status = "Enabled".

这是我的sql查询:
SELECT DISTINCT *
FROM category C LEFT OUTER JOIN subcategory S
ON C.category_id = S.category_id AND S.status = 'Enabled'
WHERE C.status = 'Enabled'
例如:

服装(类别):

     Mens Wear (subcategory)
     Laddies Wear (subcategory

移动(没有子类)

我需要显示所有类别,不管它是否有子类别。只有在两个表中状态为"Enabled"的才需要显示。

我的问题是:

对于没有子类别项的第二个类别,我没有得到category_id值,如以下示例:

1男士着装

1 Jackets
2 Sweaters

电脑

对于男士服装类别,我的id为1,对于子类别,夹克的子类别id为1,毛衣的子类别id为2。

第二个类别"Computers"没有id,没有子类别项目。

我的sql语句有什么问题?我无法理解。

问题解决:

这个问题是由于以下原因:

如果你执行一个OUTER LEFT JOIN并将PDO FetchALL设置为PDO::FETCH_ASSOC,如果在JOIN中没有返回记录,那么你在OUTER LEFT JOIN中使用的任何主键都将被设置为空白。

修复:

修复方法是简单地在SELECT子句中指定字段名,而不是使用*作为通配符,或者,您也可以在*之外指定字段。

In my sql:
SELECT DISTINCT *, C.category_id

您的左连接将不会返回不匹配的值,因为您有S.status = 'enabled'项在那里。如果你想返回"没有子类别的类别"项目,你应该将这个术语移动到"where"部分,并使其成为可选的(IE '和(s.status = enabled OR isnull(s.status))

相关内容

  • 没有找到相关文章

最新更新