2017-07-03 112 views
0

我的php脚本中没有返回所需数据的查询。查询是使用UNION和DISTINCT优化​​MySQL选择查询

select distinct require_category from users_require 

返回:

Diet 
Experience 
MeasurementsGain 
MeasurementsLoss 
MeasurementsMaintain 
WeightGain 
WeightLoss 
WeightMaintain 
Workout 

但我只想

Diet 
Experience 
MeasurementsGain 
WeightGain 
Workout 

人有我精我MySQL查询并返回corect结果,但我不认为它不够高效:

select distinct require_category from users_require where require_category NOT LIKE '%Weight%' and require_category NOT LIKE '%Measurements%' union select distinct require_category from users_require where require_category = 'WeightGain' or require_category = 'MeasurementsGain' 
+0

的问题是:用什么规则,你要包含或排除结果类别?看起来您可能想要排除包含“Loss”和“Maintain”这两个字的类别。另一个可能的规则是('饮食','体验','测量增益','体重增加','锻炼')中的require_category。但是只有你可以定义你实际需要应用的规则。 –

+0

@ThorstenKettner在我的脚本中,我将传递两个变量来定义要包含的内容,例如$ weight ='WeightGain'和$ measurements ='MeasurementsGain' – Webbs

+0

那么为什么你的结果中包含“Diet”呢?它不匹配两个字符串中的任何一个。请仔细考虑一下这个规则。最简单的方法可能是查看每一个类别,并说出为什么它在或不在结果集中。 –

回答

3

请尝试以下,

SELECT DISTINCT 
require_category FROM users_require WHERE require_category NOT LIKE '%Loss%' 
AND require_category NOT LIKE '%Maintain%' 
0

you co ULD使用一些工会

select min(require_category) 
    from users_require 
    where require_category like 'Measurements%'; 
    union 
    select min(require_category) 
    from users_require 
    where require_category like 'Weigh%'; 
    union 
    select require_category 
    from users_require 
    where require_category not like 'Measurements%' 
    and require_category not like 'Weigh%';