我是PHP的新手。我正在为我正在创建的iPhone应用程序构建一个配套的web服务。
我有以下我创建的数据库表,其中填充了触发器。
基本概念是,对于给定的货币,当价格达到触发价格时,我将发送推送通知。
在我可以生成推送通知之前,我需要一种优雅的方法来验证此表中的每个条目与当前市场价格。
最初的想法是我在考虑选择每个触发价格和每种货币,并与我在另一个变量中的当前市场价格进行比较。
有人能告诉我实现我想做的最优雅的方式吗? (比较整个表与各种货币的市场价格)
此外,如果你有任何PHP片段,那将是伟大的,
谢谢, 约翰
答案 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 ...
}
}
如果您信任数据库只包含货币数组中的内容,则可以跳过完整性检查。如果您只想检查某些货币,则只能选择与您有更新的货币匹配的行。
我还假设您的条件是触发价格低于当前价格,您可能需要根据您想要做的事情做不同的逻辑。