0

我目前正在尝试使用 php 脚本从我的(mysql)数据库中导出一些数据,尽管我也直接在 phpmyadmin 的 sql 部分中尝试了 sql 语句,结果相同。

我想做的是从我的数据库中导出每个独特的产品,以及最便宜的总价,那里有库存并且价格(成本)大于 0,即数量 > 0 和价格 > 0

所以,我想我已经在一些帮助下弄清楚了,它似乎适用于一个小数据集,但我目前在这个表中有大约 500,000 行,并且它会增长。

所以我的声明是:

SELECT 
products.name,
products.price,
products.quantity,
products.totalprice
FROM
products INNER JOIN
  (SELECT name, MIN(totalprice) min_price
   FROM products
   WHERE quantity>0 AND price>0
   GROUP BY name) m
  ON products.name=m.name AND products.totalprice=min_price

在 phpmyadmin 中,它只是出现了“加载”状态,正如您所期望的那样,但实际上从来没有给我任何值。然后我必须“停止”mysql和apache(我使用xampp)然后重新启动它们,否则我无法在数据库中做任何事情。

如果有人可以看到该声明有什么问题,那么很高兴听到任何建议。

编辑

我已经尝试过简单的 sql 语句,但它们似乎没有给我正确的答案。例如我已经尝试过:

SELECT name, MIN(totalprice) min_price, quantity
   FROM products
     WHERE quantity>0 AND totalprice>0
   GROUP BY name

但正如您从我的 sql fiddle http://sqlfiddle.com/#!2/dd9f4/7/0中看到的那样

这给了我不正确的值,也就是说,它给了我数量超过 0 的最便宜的价格,但是数量的回报,列表中数量超过 0 的第一个值,因此我有必须加入产品与产品谢谢

4

1 回答 1

0

我认为这个查询返回你想要的(使用子查询而不是连接)。它在小提琴中非常快。这会在您的数据库中足够快地执行吗?如果它很大,您可能仍然需要索引。

select name, totalprice, quantity
from products P
where totalprice > 0
and totalprice = 
(select min(totalprice) 
                     from products where name = P.name 
                     and quantity > 0)
于 2013-10-24T13:50:13.840 回答