我的数据库中有users
表,其中我有 deviceID , pushToken 操作系统。
我有另一张桌子subscriptions
。此表格包含订阅用户的 deviceID 和 pushToken 。
当我对subscriptions
表格进行新的INSERT时,我只有想要订阅的用户的 deviceID 。这两个表是否可以连接,这样当我插入 deviceID 时, pushToken 会自动从另一个表中插入?或者如果不是自动的话,也许会有一种简单的方法来引用它,因为表格会被连接?我问这样我会避免对users
表进行另一次查询以获取 pushToken ,然后将其插入subscriptions
表
我认为它与外键有关,但我不确定。有人能为我提供一个简单的编码示例,或者有关此问题的教程吗?
我正在使用php。
答案 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';
希望这有帮助。