0

我在 phpmyadmin 中有一个数据库,其中包含来自多个供应商的产品。每天我都希望能够将这些导出到 txt 制表符分隔表中。我已经按照下面的方法创建了一个 php 文件,但是,它并没有做我想做的事情。

这就是我想要做的:

导出库存(数量)大于 0 的最便宜的唯一 sku(sku 在 DB 的名称字段中,所以按名称分组?),并打印该特定供应商的相应库存水平。

示例数据:

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

任何帮助将不胜感激,如果我没有详细解释,我深表歉意。如果我错过了什么,请告诉我。

谢谢

4

2 回答 2

0

而不是使用:

 MIN(totalprice)

您可以将其保留为 totalprice 并使用 order by 代替,如下所示:

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

于 2013-09-06T12:13:41.567 回答
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
于 2013-09-06T12:15:47.103 回答