好吧,如果应用程序有用户登录,那么您只需要检查该用户的行,这还不错。
但是我会以不同的方式实现数据库,有一个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 ...
}
}
如果您相信数据库仅包含货币数组中的内容,则可以跳过完整性检查。如果您只想检查某些货币,您只能选择与您更新的货币匹配的行。
我还假设您的条件是触发价格低于当前价格,您可能需要根据您想要做什么来执行不同的逻辑。