我在phpmyadmin中有一个数据库,其中包含来自多个供应商的产品。每天我都希望能够将这些导出到txt tab deiminated sheet。我已经创建了一个php文件,但是,它没有做我想要它做的事情。
这就是我希望它做的事情:
导出最便宜的唯一sku(sku在DB上的名称字段中,因此按名称分组?),其库存(数量)大于0,并打印该特定供应商的相应库存水平。
示例数据:
merchant,name,quantity,totalprice
supplier A,APC-SMT1000I,1,150
supplier B,APC-SMT1000I,7,240
Php代码:
<?php
require("includes/common.php");
$filename = "export/products.txt";
$fp = fopen($filename,"w") or die("Could not create ".$filename." - check permissions");
fwrite($fp,"sku\tprice\tquantity\n");
$link = mysql_connect($config_databaseServer,$config_databaseUsername,$config_databasePassword,TRUE);
mysql_select_db($config_databaseName,$link);
$sql = "SELECT name AS sku,MIN(totalprice) AS minPrice,quantity FROM `".$config_databaseTablePrefix."products` WHERE quantity > 0 GROUP BY name";
$result = mysql_query($sql,$link);
while($row = mysql_fetch_array($result,MYSQL_ASSOC))
{
fwrite($fp,str_replace(","," ",$row["sku"])."\t");
fwrite($fp,$row["minPrice"]."\t");
fwrite($fp,$row["quantity"]."\n");
}
fclose($fp);
print "Done.";
?>
我原本希望打印这段代码:
sku,price,quantity
APC-SMT1000I,1,150
然而,正在打印:
sku,price,quantity
APC-SMT1000I,7,150
任何帮助都将不胜感激,如果我没有详细解释,我会道歉。如果我错过了什么,请告诉我。
由于
答案 0 :(得分:0)
而不是使用:
MIN(totalprice)
您可以像总价格一样保留它,并使用订单,而不是像这里:
ORDER By totalprice DESC
希望这有效。
最终查询:
$sql = "SELECT name AS sku, totalprice AS minPrice,quantity FROM `".$config_databaseTablePrefix."products` WHERE quantity > 0 GROUP BY name ORDER BY totalprice DESC";
警告:强> 在PHP 5.5中,不推荐使用mysql。请改用 mysqli 。
答案 1 :(得分:0)
我会将子查询用于此特定目的。虽然您可以通过价格上涨来订购,但真正的查询可能会稍微复杂一些,您可能希望使用以下内容来提供更多选项:
SELECT
name AS sku,
totalprice AS minPrice,
quantity
FROM
`".$config_databaseTablePrefix."products`
WHERE
and supplier=
(
select
supplier
from
`".$config_databaseTablePrefix."products`
where
quantity > 0
order by
totalprice asc
limit 1
)
GROUP BY
name