0

我的数据库中有一个users表,其中有一个deviceID、一个pushToken和一个OS

我还有一张桌子subscriptions。该表有订阅用户的deviceIDpushToken

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

我认为这与外键有关,但我不确定。有人可以为我提供一个简单的编码示例或有关此事的教程吗?

我正在使用 php。

4

2 回答 2

0

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

于 2013-05-03T16:06:21.183 回答
0

听起来您的数据库如下所示:

users
-----
deviceID
pushToken
OS

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

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

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”的设备 ID):

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;

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

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

希望这可以帮助。

于 2013-05-03T16:07:38.140 回答