我正在尝试通过在一个命令中完成所有操作来优化查询并使用Mysql的功能而不是使用CPU功能来获取更多Sql命令中的数据并使用bubble_sort或类似的东西订购内容。
我在此查询中使用了3个表:
表格产品
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排序。瞧!