如何优化和修复这个双JOINED MySql查询?

时间:2012-10-31 13:38:48

标签: mysql

我正在尝试通过在一个命令中完成所有操作来优化查询并使用Mysql的功能而不是使用CPU功能来获取更多Sql命令中的数据并使用bubble_sort或类似的东西订购内容。

我在此查询中使用了3个表:

  1. 产品(产品p)
  2. 产品交叉引用(produse_xref p_xref)
  3. 内部股票信息(stoc_intern s_i)
  4. 表格产品

    id | product_sku | product_name | product_desc | material | image_link
    
    22 | AP8744433-01 | Red pen | Red pen with gold cap | wood | 18923.jpg
    
    23 | AP8744433-02 | Blue pen | Blue pen with gold cap | wood | 18923.jpg
    
    23 | AP8744434-01 | Blue pen | Blue pen with gold cap | wood | 18923.jpg
    

    table produse_xref

    id | category_id | product_id (checks with id from table produse)
    
    1 | 157 | 22
    
    2 | 157 | 23
    
    3 | 49 | 140
    

    table stoc_intern

    id | p_sku | final_stock (stoc_final)
    
    400 | AP8744434-01 | 400
    
    401 | AP8744433-01 | 500
    
    402 | AP8744433-02 | 300
    
    403 | AP8744433-02 | 205
    

    我需要在页面上一次显示我的产品9个,按ROOT product_sku(AP8744433)分组,并显示每个组中的SUM或库存总数。

    例如,一个组在sku代码中:AP8744433-01和-02,将仅显示第一个,-01(所有后续项目包括-02,-03等),但显示库存项目的SUM整个集团,按降序排列,来自内部股票。

    而且... tada ......这就是答案! :)对不起,你们两个人把我的帖子记下来然后就这样离开了,所以人们会把它当作垃圾邮件忽略......我设法自己找到问题的答案。

    以下是非工作查询:

    $query_products = "SELECT p.*, s_i.cod_website, SUM(s_i.stoc_final) 
                       FROM (produse_xref p_xref 
                       RIGHT JOIN produse p ON p.id=p_xref.product_id AND p_xref.categorii_id=".$_GET['id'].") 
                       INNER JOIN stoc_intern s_i 
                       GROUP by s_i.cod_website 
                       ORDER BY SUM(s_i.cod_website) LIMIT 9";
    

    这是好的版本

    $query_products = "SELECT p.*, SUM(s.stoc_final) 
                       FROM (produse_xref p_xref INNER JOIN 
                             produse p ON p.id=p_xref.product_id AND  
                             p_xref.categorii_id=".$_GET['id'].") 
                       LEFT JOIN stoc_intern s 
                             ON p.product_sku=s.cod_website 
                             GROUP BY substr(p.product_sku, 1, 6) 
                             ORDER BY SUM(s.stoc_final) DESC 
                             LIMIT 12 OFFSET ".$_offset."";
    

    因此,有效查询会列出适合于正确类别的所有产品行,并且它们与产品ID的交叉引用中的id交叉引用,并且整个行也按GROUP SUM desc排序。瞧!

0 个答案:

没有答案