2015-05-03 92 views
0

我有一个查询,如:Mysql的查询多个选项

SELECT bp.*, b.company 
FROM `DBPREFIXwindows_brands_products` bp 
LEFT JOIN `DBPREFIXwindows_brands` b ON bp.brand_id = b.id 
JOIN Windows_last_submissions ls 
WHERE bp.width = ROUND(ls.width) 
AND bp.height = ROUND(ls.height) 
AND bp.material = ls.chosenmaterial 
AND bp.type = ls.type 
AND IF 
(ls.minimumbid != 'NULL',bp.cost BETWEEN (ls.minimumbid AND ls.maximumbid),bp.cost <= ls.maximumbid) 

领域“chosenmaterial”来自一个选择框,可容纳多个选项。我的问题是,在这个查询中 - 我如何使WHERE子句工作,以便如果一个人选择多于1个选项(显然用逗号分隔成行),我如何查询包含任何和所有这些选项的任何内容? ?

+0

在具有单选项时也是因为该选项出现麻烦addition..I'm“选项”,并在最后是否逗号有一个选项或多个选项。很明显,这会干扰查询。如果有任何“这些选项在'bp.material'行中”,请查询以上所有内容? –

+0

选择多个选项,(显然分开成逗号排) - 显而易见?不是我。请解释 – Strawberry

+0

对不起。材料行从具有不同值的选择框中填充(总共5个)。现在的数据类型是“Char”(我之前使用“varchar”的结果相同)。如果用户选择一个选项 - 它会在数据库中显示为“乙烯基”,后面跟着逗号......以及他们选择的相同,比如说“乙烯树脂,木头”。当我输入这个时,我想知道它是否来自我使用的窗体...或者可能我可以删除查询中的“,”字符? –

回答

0

您可以使用该字段的IN运算符。如果你能建立匹配的模式一样选择的材料的清单:

(material1, material2, material3) 

你可以让你的where子句是这样的:

WHERE bp.material IN (material1, material2, material3) 

这将拉动有这三个之一的任何行材料。在某种程度上,它是具有多OR语句只是一个简化版本:

WHERE material = material1 OR material = material2 OR material = material3 
+0

非常感谢McAdam,这正是我需要的! –

+0

@CaseyStack很高兴我能帮上忙!如果这是您使用的解决方案,随时通过点击答案旁边的复选标记来接受它,以便将来的读者将知道什么解决了您的问题。 – AdamMc331