Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 查询帮助(Foreach循环)_Mysql - Fatal编程技术网

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)
  • 每个项目仅属于一个类别
  • 在价格表中,每个项目只有一个打开价格、关闭价格行
如果我有10个类别,每个类别有10个项目(例如),我如何找到每个类别中价格变化最大的公司

我目前有一个php循环,可以运行并获取每个类别的最佳性能,但我想知道是否有更有效的方法来实现它

谢谢

代码:

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