SQL - 加入多个值

时间:2015-02-15 18:21:15

标签: mysql sql mysqli

我有一个关于SQL查询的问题来解决这个问题。

所以,我有8个主要类别,不属于任何表格。我希望手动将这些类别添加到如下所示的数据库类别:

 ID          Category name         Parent Category name
  1          Categoy 1             -
  2          Category 2            -
  ...        ...                   ...
  8          Category 8            -

现在,问题是我有表 Clasifications 和表产品。表 Clasifications 包含所有类别(这8个主要类别除外)和类别名称。另一个表Products,也包含所有类别(主要类别除外),但在2列中,如下所示:类别ID和子类别ID。

所以,我现在要做的是以这种方式更新表 Categories : 如果表 Products 中的类别ID以数字1开头,我想在表 Categories 中插入它的名称,并在列Parent中输入父类(类别1)名称类别名称,因此表 Categories 现在应该如下所示:

 ID          Category name         Parent Category name
  1          Categoy 1             -
  2          Category 2            -
  ...        ...                   ...
  8          Category 8            -
  111        Category 111          Category 1

因此,如果表产品中的类别ID以数字2开头,我想从分类表中获取它的名称并将INSERT转换为类别表但具有父类别名称:类别2.

之后,当我将每个类别设置为主类别的子类时,我想再次通过 Products 表循环并在表 Categories 中插入所有子类别名称但是使用类别名称中的父类别名称。

因为我在表Products中有很多相同的Category - Subcategory对,所以我从

开始
SELECT DISTINCT(CatID,SubCatID)
FROM Products

以后,当涉及到我需要从表分类中选择类别名称并将它们作为主类别的子类的部分时,我遇到了问题。

可以使用1个查询吗?我知道它需要一些硬编码,因为Main类别不在任何表格中。

提前致谢。

1 个答案:

答案 0 :(得分:0)

也许我误解了这个问题,但看起来好像你正在尝试创建一个与自身相关的表,以便存储相当于树的数量。

因此,您可以使用其他类别的子类别。假设我有这个正确的,我会将表结构化为一个ID列作为主键,一个Category列用于存储名称,一个ParentID列用于存储ID列的外键引用。

这样,您将存储具有无限嵌套潜力的父子类别。

选择父母的子女看起来像这样:

select ParentCategory.ID, ParentCategory.Category, ChildCategory.ID, ChildCategory.Category
from CategoryTable ParentCategory
join CategoryTable ChildCategory on ChildCategory.ParentID = ParentCategory.ID
where ParentCategory.Category = [insert parent category name here]

有多少父母,他们有多少孩子?

select ParentCategory.ID, ParentCategory.Category, count(ChildCategory.ID)
from CategoryTable ParentCategory
join CategoryTable ChildCategory  on ChildCategory.ParentID = ParentCategory.ID
group by ParentCategory.ID, ParentCategory.Category
having count(ChildCategory.ID) > 0