联结表中的新条目,但避免在表中重复

时间:2013-06-11 15:13:58

标签: php mysql insert duplicates

我有三张桌子,

Table1有id(pk)和名字 表2有id(pk)和类别 Table3是一个联结表,有id(pk)和两个外键:table1_id(pk来自提到的table1)和table2_id(pk来自提到的table2)

表单页面有一个输入框(名称)和一个从Table2获取选项的下拉列表。 提交表单时,将在Table1.name中输入名称,并使用下拉选项的ID和输入的名称的ID填充Table3。

所有这一切都按预期工作。

我正在寻找答案的情况是:

在表单页面中,如果输入的名称已存在于表1中,但下拉列表和名称的组合是唯一的,而不是之前输入的内容,我希望名称 INSERTed in表1,但表3中的 组合

Table1
| id |   name   |
-----------------
| 1  |   John   |
| 2  |   Mark   |

Table2
| id | category |
-----------------
| 1  |   Red    |
| 2  |   Blue   |

Table3
| id | table1_id | table2_id |
------------------------------
| 1  |   1       |   1       |
| 2  |   1       |   2       |

1 个答案:

答案 0 :(得分:0)

表1

"IF(
    (
        SELECT name
        FROM Table1
        WHERE name='".mysql_real_escape_string($_POST['name'])."'
    ) IS NOT NULL,
    '',
    (
        INSERT INTO Table1
        VALUES(NULL,'".mysql_real_escape_string($_POST['name'])."'))
    ),''
);"

表3

"IF(
    (
        SELECT id
        FROM Table3
        WHERE table1_id='".(int)$_POST['table1_id']."'
        AND   table2_id='".(int)$_POST['table2_id']."'
    ) IS NOT NULL,
    '',
    (
        INSERT INTO Table3
        VALUES('".(int)$_POST['table1_id']."','".(int)$_POST['table2_id'])."'))
    ),
);"

我以前没试过,但我相信它会奏效。此外,根据您的PHP代码,mysql_real_escape_string($_POST['name'])(int)$_POST['tableX_id']位可能需要稍微不同。