0

好吧,我的问题是我想将某种产品存储在他们自己的表中,并且我想从这些产品中选择一些到特色/强调产品表中中,该表将存储每个表中所选行的 ID 以显示那些网站主页上的特色产品。

从他们的表中选择特色产品后,我想自己订购如何列出它们,所以我认为需要一个新表来存储特色产品的 ID 和顺序,但我无法想象如何正确连接这些表。

我想了很多如何解决这个问题,但我希望有人知道正确的答案!

4

1 回答 1

1

创建第二个表:

CREATE TABLE FEATURED_PRODUCTS (
    ID INTEGER NOT NULL,
    PRODUCT_ID INTEGER NOT NULL,
    PRODUCT_ORDER INTEGER NOT NULL
)

然后,当您想找到您的特色产品时,只需加入您的原始表格:

SELECT P.*
FROM PRODUCTS P 
    INNER JOIN FEATURED_PRODUCTS FP ON P.ID = FP.PRODUCT_ID
ORDER BY FP.PRODUCT_ORDER

值得一提的是,FEATURED_PRODUCTS 表中的 ID 并不是绝对必要的,我只是不喜欢没有主键列的表。

- - 编辑 - -

更完整的例子:

CREATE TABLE FRUIT_PRODUCTS (
    ID INTEGER NOT NULL,
    NAME VARCHAR(255),
    PRICE INTEGER NOT NULL,
    FARM_OF_ORIGIN VARCHAR(255)
)

CREATE TABLE BREAD_PRODUCTS (
    ID INTEGER NOT NULL,
    NAME VARCHAR(255),
    PRICE INTEGER NOT NULL,
    TYPE_OF_GRAIN VARCHAR(255)
)

CREATE TABLE MEAT_PRODUCTS (
    ID INTEGER NOT NULL,
    NAME VARCHAR(255),
    PRICE INTEGER NOT NULL,
    ANIMAL VARCHAR(255)
)

CREATE TABLE FEATURED_PRODUCTS (
    ID INTEGER NOT NULL,
    TABLE_NAME VARCHAR(255),
    PRODUCT_ID INTEGER NOT NULL,
    PRODUCT_ORDER INTEGER NOT NULL
)

然后你就可以加入他们了:

SELECT FP.TABLE_NAME, P.ID, P.NAME, P.PRICE, P.FARM_OF_ORIGIN, 
    NULL AS TYPE_OF_GRAIN, NULL AS ANIMAL
FROM FEATURED_PRODUCTS FP 
    INNER JOIN FRUIT_PRODUCTS P ON FP.TABLE_NAME = 'FRUIT_PRODUCTS' 
        AND FP.PRODUCT_ID = P.ID
UNION
SELECT FP.TABLE_NAME, P.ID, P.NAME, P.PRICE, NULL AS FARM_OF_ORIGIN, 
    P.TYPE_OF_GRAIN, NULL AS ANIMAL
FROM FEATURED_PRODUCTS FP 
    INNER JOIN BREAD_PRODUCTS P ON FP.TABLE_NAME = 'BREAD_PRODUCTS' 
        AND FP.PRODUCT_ID = P.ID
UNION
SELECT FP.TABLE_NAME, P.ID, P.NAME, P.PRICE, NULL AS FARM_OF_ORIGIN, 
    NULL AS TYPE_OF_GRAIN, P.ANIMAL
FROM FEATURED_PRODUCTS FP 
    INNER JOIN MEAT_PRODUCTS P ON FP.TABLE_NAME = 'MEAT_PRODUCTS' 
        AND FP.PRODUCT_ID = P.ID

这将为您提供一个包含所有特色产品的结果集。 请注意,这是未经测试的,但应该可以理解这个想法

于 2013-06-03T19:41:02.457 回答