Mysql 在查询重复值中使用distinct

Mysql 在查询重复值中使用distinct,mysql,distinct,Mysql,Distinct,我想知道是否有人能发现这个只显示“公司”和“材料”的“查看”查询的问题。问题是,它为每个物料和公司显示每个条目的单独时间。我使用此视图填充表单中的下拉框,但我只希望它显示每个列公司/材料的不同值-例如,从现在起,如果最终结果是公司“Anderson”两次,但每个列的材料不同…它显示“Anderson”两次。我已经尝试在select语句之后分别为这两个语句使用DISTINCT,但没有达到我想要的效果 select `b`.`company` AS `company`, `bp`.`material

我想知道是否有人能发现这个只显示“公司”和“材料”的“查看”查询的问题。问题是,它为每个物料和公司显示每个条目的单独时间。我使用此视图填充表单中的下拉框,但我只希望它显示每个列公司/材料的不同值-例如,从现在起,如果最终结果是公司“Anderson”两次,但每个列的材料不同…它显示“Anderson”两次。我已经尝试在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`)))
可能的答案:

将GROUP_CONCAT和GROUP 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`);
这将为每个公司和材料返回一行。材料将是一个逗号分隔的列表@Barmar。然后,您可以为第二个下拉列表解析该字段

示例行:

安德森“木头,乙烯基”

“WM”“金属”“塑料”


假设您正在构建一个网页,这取决于您构建DOM的方式,您可以使用javascript str.split,也可以在服务器端使用任何语言。

要清楚,您是否试图为每个公司获取一行,其中包含一个包含材料列表的字段?DISTINCT适用于组合,不是每一列。如果只显示一次Anderson,那么应该显示哪种材质?也许您希望GROUP_CONCATbp.material按公司列出所有材质?问题似乎在于您合法地有多个连接行。如果安德森公司有材料木材和材料钢,那么它正确地显示了两排。安德森、伍德和安德森、钢铁是截然不同的。您可能希望先提取您的公司,然后更新材料,或将材料合并到单个逗号分隔的字符串中,或将材料向后拉到顶部1,使其只能匹配1行。请发布一些示例数据和您尝试获取的结果。很难理解你想要什么。它完全按照你的期望工作。不幸的是,我正在使用wordpress插件来填充下拉列表,我不知道如何在表单中包含JS。问你一个问题……为什么在“材料”中添加DISTINCT不会只显示每种材料的不同值?正如@Barmar所说,DISTINCT为你提供了不同的组合。意思是,安德森和伍德的结合不同于安德森和钢铁。如果你有两行给了你安德森和伍德,DISTINCT会把这两行变成一行。@CaseyStack这能回答你的问题吗?