我正在为在线珠宝购物网站开发MySQL数据库。每件珠宝都可能有不同的宝石,金属......他们的净价每天都会发生变化(例如,每盎司黄金今天可能是X,明天可能是Y)。产品A今天可能比B贵,但明天便宜。每次用户请求产品列表时,网站都会自动计算每种产品的价格。
用户如何按价格对产品进行分类,考虑到净价未存储在DB中的字段中,并且每次都将使用名为func($id)
的函数计算(使用权重,净费用......),其中$id
是产品的ID。
问题的例证:
答案 0 :(得分:1)
假设您的数据库中包含所有数据,则没有理由不能ORDER BY
任何您想要的表达方式。
如果您有一个表products (pid, name)
,productContents (pid, type, amount)
和contentPrices (type, price)
,则可以运行类似
SELECT a.name, SUM(b.amount*c.price) AS totalPrice FROM products a
LEFT JOIN productContent b ON a.pid = b.pid
LEFT JOIN contentPrices c ON b.type=c.type
ORDER BY totalPrice DESC;
编辑以使用更新的问题架构:
SELECT p.title, p.metal_weight*m.fee + p.stone_weight*s.fee AS totalPrice FROM Products p
LEFT JOIN Metals m ON p.metal_id=m.id
LEFT JOIN Stones s ON p.stone_id=s.id
ORDER BY totalPrice DESC;
答案 1 :(得分:0)
我会以两种方式做到这一点,但首先,如果你想要一个好的表现,将价格值存储在一个字段中。我不认为它每秒都会改变,是吗?
首先,如果您可以在MySQL中创建价格计算器功能,请为其创建存储过程并定期在表格上运行(例如每天00:00)并将值存储在字段中。您可以在MySQL here中找到如何安排活动的方法。
如果你不能这样做,请继续使用php,但它也应定期调用以计算所有内容。您可以在Unix上使用cron(如果您拥有权限)。这也可以安排在远程服务器上,所以如果你有一个可以使用cron的服务器,只需用wget调用updater.php,例如:
wget -c http://jewerly-shop.com/update_prices.php && rm -rf update_prices.php
但是如果你需要进一步的帮助,我们需要更多的信息(比如计算和表结构的函数)。