在应用程序级别而不是数据库级别进行筛选

时间:2017-08-31 07:25:35

标签: php mysql sql wordpress

我在Wordpress环境中工作,但问题适用于更一般的背景 我在MySql中有这个查询:

SELECT DISTINCT p.ID,p.post_author, exp_years.meta_value AS exp_years, exp_baby.meta_value AS exp_baby

FROM  `hlp_posts` p
LEFT JOIN  `hlp_postmeta` m ON p.ID = m.post_id
LEFT JOIN  `hlp_postmeta` exp_baby ON p.ID = exp_baby.post_id
LEFT JOIN  `hlp_postmeta` exp_years ON p.ID = exp_years.post_id

WHERE

p.post_type = 'babysitter'
AND p.post_status = 'publish'
AND exp_baby.meta_key = 'skills'  AND (exp_baby.meta_value LIKE '%i:0%' AND exp_baby.meta_value LIKE '%i:1%' AND exp_baby.meta_value LIKE '%i:2%' AND exp_baby.meta_value LIKE '%i:3%')
AND exp_years.meta_key = 'resume_years_of_exp'

ORDER BY  `p`.`ID` DESC  

你可以看到我用来过滤序列化数组的LIKE 实际上这是SO问题的简化,在我的代码中我有4个这样的问题 由于我遇到查询缓慢,因为我知道LIKE工作缓慢,最好避免它 如果我在PHP级别过滤它,你认为我会体验到好处吗?
我的意思是,我消除了包含LIKE的 exp_baby 上的WHERE子句,然后在PHP中循环遍历数组结果,我删除了包含我不需要的数据的那些。

0 个答案:

没有答案