0

我对 PHP 很陌生。我正在为我正在创建的 iPhone 应用程序构建一个配套的 Web 服务。

我创建了以下数据库表,其中填充了触发器。

在此处输入图像描述

基本概念是,对于给定的货币,当价格达到触发价格时,我将发送推送通知。

在生成推送通知之前,我需要一种优雅的方法来根据当前市场价格验证此表中的每个条目。

在最初的想法中,我正在考虑选择每个触发价格和每种货币,并与我在另一个变量中的当前市场价格进行比较。

谁能告诉我实现我想要做的最优雅的方式?(将整个表格与各种货币的市场价格进行比较)

此外,如果您有任何很棒的 php 片段,

谢谢,约翰

4

1 回答 1

1

好吧,如果应用程序有用户登录,那么您只需要检查该用户的行,这还不错。

但是我会以不同的方式实现数据库,有一个currencies像这样的单独表:

id             SERIAL
currency_name  VARCHAR(10)
market_price   FLOAT

然后更改您的主表,使其target_price也是 a FLOAT(如果您存储美分或等价物的数量而不是美元值,则可以使用 int ,因此使用 103 而不是 1.03)。最后将货币更改为引用另一个表的 int

currency_id    INTEGER

然后你可能想给表添加一个外键约束:

FOREIGN KEY (currency_id) 
    REFERENCES currencies(id)

现在您可以在 market_price 变化时更新货币表,然后使用 SQL 获取需要触发的行的列表:

SELECT u.id 
    FROM users u, currencies c
    WHERE u.currency_id = c.id 
      AND u.trigger_price <= c.market_price
;

在我看来,这可能是最好的方法。

如果您真的需要在 PHP 中执行此操作,那么我将创建一个市场价格的关联数组,其中价格 ['currency_name'] = 该货币的市场价格。并且货币名称与表中的字符串匹配。然后你只需要遍历整个表并检查每个匹配项,假设你已经将表取出$result并检查了错误:

while ($row = $result->fetch_assoc()) {
    if (isset($prices[$row->currency) // Sanity check on the prices array
        && ($row->trigger_price <= $prices[$row->currency])) 
    {
       // Matching row, do something with it ... 
    }
}

如果您相信数据库仅包含货币数组中的内容,则可以跳过完整性检查。如果您只想检查某些货币,您只能选择与您更新的货币匹配的行。

我还假设您的条件是触发价格低于当前价格,您可能需要根据您想要做什么来执行不同的逻辑。

于 2013-09-08T09:08:19.900 回答