查询重复值不同

时间:2015-05-19 19:20:52

标签: mysql distinct

我想知道是否有人能够通过这种观点来发现问题'查询仅显示' company'和'材料'。问题是它为每个材料和公司显示每个条目的单独时间。我使用此视图填充表单中的下拉框但我只希望它显示每列(公司/材料)的不同值 - 例如,如果最终结果是公司& #39;安德森'两次,但每种材料都不同......它显示了安德森'两次。我已经尝试在两者中的每一个的select语句之后使用DISTINCT,但我没有实现我想要的。

select `b`.`company` AS `company`, `bp`.`material` AS `material` 
from (((`caseys_wrdp4`.`windows_brands_products` `bp` 
        left join `caseys_wrdp4`.`windows_brands` `b` on((`bp`.`brand_id` = `b`.`id`))) 
       join `caseys_wrdp4`.`Windows_last_submissions` `ls`) 
      join `caseys_wrdp4`.`windows_materials` `wm`) 
where ((`bp`.`width` = round(`ls`.`width`,0)) 
       and (`bp`.`height` = round(`ls`.`height`,0))
       and (`bp`.`material` = `wm`.`name`) 
       and (`bp`.`type` = `ls`.`type`) 
       and if ((`ls`.`minimumbid` <> '0.00'),
               (`bp`.`cost` between `ls`.`minimumbid` and `ls`.`maximumbid`),
               (`bp`.`cost` <= `ls`.`maximumbid`)))

1 个答案:

答案 0 :(得分:0)

可能的答案:

GROUP_CONCATGROUP BY添加到您的查询中:

select `b`.`company` AS `company`, GROUP_CONCAT(`bp`.`material`) AS `materials` 
from (((`caseys_wrdp4`.`windows_brands_products` `bp` 
    left join `caseys_wrdp4`.`windows_brands` `b` on((`bp`.`brand_id` = `b`.`id`))) 
  join `caseys_wrdp4`.`Windows_last_submissions` `ls`) 
  join `caseys_wrdp4`.`windows_materials` `wm`) 
where ((`bp`.`width` = round(`ls`.`width`,0)) 
   and (`bp`.`height` = round(`ls`.`height`,0))
   and (`bp`.`material` = `wm`.`name`) 
   and (`bp`.`type` = `ls`.`type`) 
   and if ((`ls`.`minimumbid` <> '0.00'),
           (`bp`.`cost` between `ls`.`minimumbid` and `ls`.`maximumbid`),
           (`bp`.`cost` <= `ls`.`maximumbid`)))
GROUP BY(`b`.`company`);

这将为每个公司提供一行companymaterialsmaterials将是逗号分隔列表(@Barmar)。然后,您可以解析该字段以进行第二次下拉。

示例行:

'Anderson' 'Wood,Vinyl'

'WM' 'Metal','Plastic'

假设您正在构建网页,根据您构建DOM的方式,您可以使用javascript str.split()https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split,或者在服务器端,任何语言都应该有效。