2013-05-02 3 views
0

Если у меня есть следующие таблицы:Удаление строки с отношениями с другими таблицами

Product 
+----+------+ 
| id | name | 
+----+------+ 
| 1 | box | 
| 2 | car | 
| 3 | ball | 
+----+------+ 

Color 
+----+-------+ 
| id | name | 
+----+-------+ 
| 1 | red | 
| 2 | green | 
| 3 | blue | 
+----+-------+ 

Size 
+----+--------+ 
| id | number | 
+----+--------+ 
| 1 |  1 | 
| 2 |  5 | 
| 3 |  10 | 
+----+--------+ 

Color Options (#product | #color) 
+---------+-------+ 
| product | color | 
+---------+-------+ 
|  1 |  1 | 
|  1 |  3 | 
|  3 |  1 | 
|  3 |  2 | 
|  2 |  3 | 
+---------+-------+ 

Size Options (#product | #size) 
+---------+-------+ 
| product | color | 
+---------+-------+ 
|  1 |  1 | 
|  1 |  2 | 
|  3 |  1 | 
|  3 |  2 | 
|  2 |  2 | 
|  2 |  3 | 
+---------+-------+ 

Когда я удалить продукт, что это лучший способ, чтобы удалить отношения это иметь с цветом и размером? Нужно ли мне делать удаление в каждой таблице или какой-либо автоматический процесс?

+0

Я бы сделал функцию 'deleteProduct ($ id)', которая будет запускать запросы DELETE во всех таблицах – jimmy

ответ

3

Установили вы до надлежащего ОТНОШЕНИЕ для MySQL? Вы можете обратиться к этому вопросу How to create relationships in MySQL и MySQL foreign key constraints, cascade delete

+0

Да, я использовал FOREIGN KEY. –

+1

вы должны добавить ON DELETE CASCADE при ссылке на внешний ключ, чтобы в вашем случае он автоматически удалился –

+0

спасибо :) попробует! –

-1

INNER JOIN является ответом

DELETE 
FROM Product p 
    INNER JOIN Color_Options co 
    ON co.product = p.id 
    INNER JOIN Color c 
    ON co.color = c.id 
    INNER JOIN Size_Options so 
    ON co.product = p.id 
    INNER JOIN Size s 
    ON so.color = s.id 
1
CREATE TABLE SIZE_OPTIONS(PRODUCT REFERENCES PRODUCT(ID), COLOR REFERENCES COLOR_OPTIONS(COLOR) ON DELETE CASCADE); 

Используйте тот же knind заявления с COLOR_OPTIONS.

+0

каждый раз, когда я использую FOREIGN KEY, следует ли использовать DELETE CASCADE? вы не имели в виду: CREATE TABLE SIZE_OPTIONS (PRODUCT LINFER PRODUCT (ID) ON DELETE CASCADE); –

+0

Если вы хотите, чтобы отношение имело каскадный эффект, используйте ON DELETE CASCADE. Нет, если вы не хотите, чтобы – Santhosh

Смежные вопросы