2013-06-03 2 views
0

Ну моя проблема в том, что я хотел бы хранить некоторые виды продукции в своих собственных таблицах и из этих продуктов я хотел бы, чтобы выбрать некоторые в признаки/подчеркнул продукты таблицу, которая будет хранить идентификатор выбранных строк из каждой таблицы, чтобы отображать эти признанные продукты на домашней странице веб-сайта.Mysql схема таблицы признаков/подчеркнуты продукты

После выбора рекомендуемых продуктов из их таблиц я хотел бы сделать свой заказ, как они будут перечислены, поэтому я думаю, что нужна новая таблица, где я могу хранить идентификатор и порядок предлагаемых продуктов, но я не могу себе представить, как правильно подключать эти таблицы.

Я много думал, как решить эту проблему, но, надеюсь, кто-то узнает правильный ответ!

ответ

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 таблице является не строго необходимо, мне просто не нравится иметь таблицы без первичных ключевых столбцов.

---- EDIT ----

Более полный пример:

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 

Который даст вам набор результатов, содержащий все доступные продукты. Обратите внимание, что это не проверено, но должно получить идею через.

+0

. , 'order' является паршивым именем для столбца, потому что это зарезервированное слово MySQL. –

+0

@GordonLinoff Абсолютно корректно ... Обновление сейчас. – Lucas

+0

Да, это хорошо для одного типа продуктов, но у меня есть 3 типа продуктов, и вы не можете присоединиться к 3 таблицам друг к другу на одном столбце. Или, может быть, я должен создавать столбцы для каждой таблицы, чтобы присоединиться к ним в таблице признанных продуктов? – user2042930