gpt4 book ai didi

php - Mysql架构中类别的多重排序

转载 作者:行者123 更新时间:2023-11-29 00:25:21 24 4
gpt4 key购买 nike

我的 Mysql MyISAM 表存在设计问题。

我的一个表包含“类别”列表(大约 100 行)

id   |catcode      |name
-------------------------------
1 @01 lorem
2 @0101 ipsum
3 @02 dolor

另一个表包含“产品”。 (大约 28.000 行)

id   |cats      |name      ...
---------------------------
1 @01@02 lorem ...
2 @0101 ipsum ...
3 @02@0101 dolor ...

在我的产品表中,我定义了它们所属的类别列表。

一切正常,但现在:

我想根据所选类别自定义它们的显示顺序。目前,我的产品表中有一个包含类别 ID 的列,但是这个接缝很脏(ordering_1、ordering_2、ordering_3、...)特别是因为每个产品只出现在 2 或 3 个不同的类别中,所以大多数列都是空的:

 id   |cats      |name      |ordering_1    |ordering_2   |ordering_3  ...
-----------------------------------------------------------------------
1 @01@02 lorem 17 12
2 @0101 ipsum 13
3 @02@0101 dolor 21 8

我想使用第三个表来确定顺序,但是如何呢?

基本思想是有一个包含类别的表格和一个“排序”列表,但其中一个列表包含所有产品! (主要类别)我想做一个包含 28.000 id 的请求会很慢......

如何处理?

最佳答案

您应该使用外键和连接表来链接产品和类别,而不是您的 catcode 构造。

创建类似于以下的表结构(示例适用于 MySQL):

CREATE TABLE product (
id INT NOT NULL,
name VARCHAR(255),
PRIMARY KEY (id)
) ENGINE=InnoDB;

CREATE TABLE category (
id INT NOT NULL,
name VARCHAR(255),
PRIMARY KEY (id)
) ENGINE=InnoDB;

CREATE TABLE product_category (
product_id INT NOT NULL,
category_id INT NOT NULL,
ordering INT NOT NULL,
PRIMARY KEY (product_id, category_id),
FOREIGN KEY (product_id) REFERENCES product (id),
FOREIGN KEY (category_id) REFERENCES category (id)
) ENGINE=InnoDB;

然后要按照为该类别定义的方式对特定类别中的所有产品进行排序,请像这样查询它们:

SELECT * FROM product p LEFT JOIN product_category pc ON p.id = pc.product_id
WHERE pc.category_id = 1
ORDER BY pc.ordering ASC;

1是这里面的分类id。您还可以按类别名称查询,例如:

SELECT * FROM product p
LEFT JOIN product_category pc ON p.id = pc.product_id
LEFT JOIN category c ON pc.category_id = c.id
WHERE c.name = "foo"
ORDER BY pc.ordering ASC;

关于php - Mysql架构中类别的多重排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19207701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com