我在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中循环遍历数组结果,我删除了包含我不需要的数据的那些。