使用PHP在数据库中实现值检查的最佳方法

时间:2013-09-08 07:44:03

标签: php mysql database

我是PHP的新手。我正在为我正在创建的iPhone应用程序构建一个配套的web服务。

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

enter image description here

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

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

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

有人能告诉我实现我想做的最优雅的方式吗? (比较整个表与各种货币的市场价格)

此外,如果你有任何PHP片段,那将是伟大的,

谢谢, 约翰

1 个答案:

答案 0 :(得分:1)

如果应用程序有用户登录,那么您只需要检查该用户的行,这并不是那么糟糕。

但是我会以不同的方式实现数据库,有一个单独的currencies表,如下所示:

id             SERIAL
currency_name  VARCHAR(10)
market_price   FLOAT

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

currency_id    INTEGER

然后,您可能希望向表中添加外键约束:

FOREIGN KEY (currency_id) 
    REFERENCES currencies(id)

现在您可以在market_price更改时更新currency表,然后使用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 ... 
    }
}

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

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