我想知道是否有人能够通过这种观点来发现问题'查询仅显示' 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`)))
答案 0 :(得分:0)
可能的答案:
将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`);
这将为每个公司提供一行company
和materials
。 materials
将是逗号分隔列表(@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,或者在服务器端,任何语言都应该有效。