mySQL数据库中表之间的连接

时间:2013-05-03 16:02:01

标签: mysql database foreign-keys

我的数据库中有users表,其中我有 deviceID pushToken 操作系统

我有另一张桌子subscriptions。此表格包含订阅用户的 deviceID pushToken

当我对subscriptions表格进行新的INSERT时,我只有想要订阅的用户的 deviceID 。这两个表是否可以连接,这样当我插入 deviceID 时, pushToken 会自动从另一个表中插入?或者如果不是自动的话,也许会有一种简单的方法来引用它,因为表格会被连接?我问这样我会避免对users表进行另一次查询以获取 pushToken ,然后将其插入subscriptions

我认为它与外键有关,但我不确定。有人能为我提供一个简单的编码示例,或者有关此问题的教程吗?

我正在使用php。

2 个答案:

答案 0 :(得分:0)

这是非常糟糕的设计。订阅表的姓氏列是多余的。除非有令人信服的理由保留它,否则我倾向于放弃它。

答案 1 :(得分:0)

听起来您的数据库看起来像这样:

users
-----
deviceID
pushToken
OS

subscriptions
-------------
deviceID
pushToken

如果是这种情况,您可以同时将deviceID和pushToken插入到订阅表中,即使您只使用类似这样的查询的deviceID(假设“123ABC”是您要插入的设备ID):

INSERT subscriptions (deviceID, pushToken)
SELECT deviceID, pushToken
FROM users
WHERE deviceID = '123ABC';

但是,这通常不被认为是数据库的良好设计。通常,您不希望在两个位置重复数据。在这种情况下,deviceID和pushToken存储在users表和subscriptions表中。这可能是一种改进:

users
-----
id
deviceID
pushToken
OS

subscriptions
-------------
id
user_id

如果您的数据库是以这种方式构建的,您可以使用此SQL将新记录插入到订阅表中(同样对于“123ABC”的deviceID):

INSERT subscriptions (user_id)
SELECT id
FROM users
WHERE deviceID = '123ABC';

我没有专门插入id,因为我假设它是数据库提供的自动递增ID。

没有必要将deviceID放在订阅表中。只需拥有用户ID即可“连接”表格。您可以使用PHP代码中的SQL“连接”这些表。如果您想知道订阅25的用户的deviceID和pushToken,SQL可能如下所示:

SELECT deviceID, pushToken FROM users, subscriptions 
WHERE users.id = subscriptions.user_id AND subscriptions.id = 25;

如果您想知道设备ID为“123ABC”的用户拥有的所有订阅,请尝试以下查询:

SELECT * FROM users, subscriptions
WHERE users.id = subscriptions.user_id AND user.deviceID = '123ABC';

希望这有帮助。