Mysql 查询帮助(Foreach循环)
我有以下表格:Mysql 查询帮助(Foreach循环),mysql,Mysql,我有以下表格: items(itemid, itemName, catid) categories (catid, catname) prices (itemid, open_price, close_price) 每个项目仅属于一个类别 在价格表中,每个项目只有一个打开价格、关闭价格行 如果我有10个类别,每个类别有10个项目(例如),我如何找到每个类别中价格变化最大的公司 我目前有一个php循环,可以运行并获取每个类别的最佳性能,但我想知道是否有更有效的方法来实现它 谢谢 代码:
items(itemid, itemName, catid)
categories (catid, catname)
prices (itemid, open_price, close_price)
- 每个项目仅属于一个类别
- 在价格表中,每个项目只有一个打开价格、关闭价格行
foreach category,运行以下查询:
选择c.itemid、c.itemname、
100.0*(cp.close\u price-cp.open\u price)/IFNULL(cp.open\u price,1)随着整体价格的变化而变化
来自价格cp
在c.itemid=prices.itemid上左连接项目c
式中,c.catid=8个订单,按总变更描述限值1代码>如果您不介意绘制(当两个项目位于一个类别的顶部时)
。。。我还没有测试过:)你想在php循环中还是在查询之前进行计算?如果你有一个可以工作的php循环,但是你想要更高效的东西,也许你可以向我们展示你已经拥有的代码,因为这将有助于你更好地理解你想要达到的目标,以及你到目前为止已经走了多远。@Spudley我真的很想在这里完成所有的工作mysql@user1062354:是的,我确实知道了,但如果您向我们展示现有代码,它将帮助我们了解如何将其转换为SQL。@Spudley请参见上面的编辑
SELECT
cat.catid,
cat.catname,
c.itemid,
c.itemname ,
100.0 * ( cp.close_price - cp.open_price )/ IFNULL(cp.open_price,1) AS overall_change
FROM
categories AS cat
JOIN
items AS c
ON cat.catid = c.catid
JOIN
prices AS cp
ON c.itemid = cp.itemid
JOIN
(SELECT
c.catid,
MAX(100.0 * ( cp.close_price - cp.open_price )/ IFNULL(cp.open_price,1)) AS overall_change
FROM
items AS c
JOIN
prices AS cp
ON c.itemid = cp.itemid
GROUP BY
c.catid
) AS max
ON cat.catid = c.catid
AND max.overall_change = (100.0 * ( cp.close_price - cp.open_price )/ IFNULL(cp.open_price,1))
ORDER BY
cat.catid