2012-08-31 41 views
2

所有类似命名的记录我都保存像包含数据的表:如何获得在MySQL

product_name | quantity | tert 
ASIZ A4 100 FOX | 20| BUYER1 
CERVEZA A6 150 FOX | 15| BUYER1 
ASIZ A4 150 FOX | 40| BUYER1 
CERVEZA A6 11 FOX | 15| BUYER1 
QUINTA A6 150 FOX | 15| BUYER2 
ASIZ A4 150 FOX | 33 | BUYER2 
ASIZ A6 150 FOX | 15| BUYER2 
CERVEZA A6 150 FOX | 15| BUYER2 

我想找回那首词(例如ASIZ)总结的数量和显示它们相匹配的全部数据像:

BUYER1 
Asiz - 60 pcs. 
Cerveza = 30 pcs. 
etc. 

BUYER2 
Asiz = 48 pcs. 
Cerveza = 15 pcs. 

目前我使用的2 while循环:

SELECT DISTINCT product_name 
FROM my_table 
WHERE buyer_code= '".$bcode."' 
GROUP BY product_name 

- 和我得到的产品名称

然后

SELECT DISTINCT product_name,tert, SUM(quantity) AS quantity 
FROM my_table 
WHERE buyer_code ='".$bcode."' AND 
     prouct_name LIKE '".$first_word_of_product_name."%' 
GROUP BY tert 
ORDER BY data ASC 

我得到的款项的权利,但它列出了他们每发现类似命名的产品时(如:BUYER1:ASIZ - 2倍等)

它表明:

Buyer1 
ASIZ - 60 
Cerveza - 30 
ASIZ - 60 
Cerveza - 30 

我知道它有什么做的PRODUCT_NAME,但我应该怎么写SQL语句的工作? 感谢

回答

0

运行

SELECT tert, SUBSTRING_INDEX(product_name,' ',1) as product, sum(quantity) as qty 
FROM my_table 
GROUP BY tert, product 
ORDER BY tert, product 

你的结果是由分页,使您可以同时通过一个显示产品通过一个走和数量和显示每次一个变化。

UPDATE: 一个代码示例如何输出的数据(未测试):

$tert = null; 
foreach($rows as $row){ 
    if($rows['tert'] != $tert){ 
     $tert = $rows['tert']; 
     echo $tert; 
    } 
    echo $row['product'], "-", $row['qty']; 
} 

这里$rows - 所有的读取的行。

+0

我需要打印ASIZ - 60片(通用产品,包括30 ASIZ简单,20 ASIZ优越,10 ASIZ单) 不 ASIZ简单-30 等 - 的数据列表 – user1638656

+0

@ user1638656这正是'SUBSTRING_INDEX(PRODUCT_NAME ,'',1)作为产品和'GROUP BY tert,产品'。 –

+0

@ user1638656我修正了'GROUP BY'子句。 –

1
SELECT SUBSTRING_INDEX(product_name, '.', 1) product, tert, SUM(quantity) quantity 
FROM my_table 
GROUP BY product, tert 
+0

我认为它会工作 – diEcho

0

从你的第二个SQL删除tert和预期它会工作。

更改为

SELECT DISTINCT product_name,tert, SUM(quantity) AS quantity 
FROM my_table 
WHERE buyer_code ='".$bcode."' 
    AND prouct_name LIKE '".$first_word_of_product_name."%' 
GROUP BY tert 
ORDER BY data ASC 

SELECT DISTINCT product_name, SUM(quantity) AS quantity 
FROM my_table 
WHERE buyer_code ='".$bcode."' 
    AND prouct_name LIKE '".$first_word_of_product_name."%' 
GROUP BY product_name 
ORDER BY data ASC 
+0

nope,它只是列出所有记录,每次找到一个产品(例如:for buyer1 - 列出asiz -60两次 – user1638656

+0

Opp。编辑.' Group by'正在使用'tert'。你想要在product_name上分组的数量总和,那么这个SQL应该工作,请检查。 – mtk