好吧,我的问题是我想将某种产品存储在他们自己的表中,并且我想从这些产品中选择一些到特色/强调产品表中中,该表将存储每个表中所选行的 ID 以显示那些网站主页上的特色产品。
从他们的表中选择特色产品后,我想自己订购如何列出它们,所以我认为需要一个新表来存储特色产品的 ID 和顺序,但我无法想象如何正确连接这些表。
我想了很多如何解决这个问题,但我希望有人知道正确的答案!
好吧,我的问题是我想将某种产品存储在他们自己的表中,并且我想从这些产品中选择一些到特色/强调产品表中中,该表将存储每个表中所选行的 ID 以显示那些网站主页上的特色产品。
从他们的表中选择特色产品后,我想自己订购如何列出它们,所以我认为需要一个新表来存储特色产品的 ID 和顺序,但我无法想象如何正确连接这些表。
我想了很多如何解决这个问题,但我希望有人知道正确的答案!
创建第二个表:
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
这将为您提供一个包含所有特色产品的结果集。 请注意,这是未经测试的,但应该可以理解这个想法。