如何通过多个表中多列之间的数学关系对MySQL查询进行排序

时间:2014-08-07 17:35:52

标签: php mysql sorting

我正在为在线珠宝购物网站开发MySQL数据库。每件珠宝都可能有不同的宝石,金属......他们的净价每天都会发生变化(例如,每盎司黄金今天可能是X,明天可能是Y)。产品A今天可能比B贵,但明天便宜。每次用户请求产品列表时,网站都会自动计算每种产品的价格。

用户如何按价格对产品进行分类,考虑到净价未存储在DB中的字段中,并且每次都将使用名为func($id)的函数计算(使用权重,净费用......),其中$id是产品的ID。

问题的例证:

Database example

2 个答案:

答案 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

但是如果你需要进一步的帮助,我们需要更多的信息(比如计算和表结构的函数)。

相关问题