使用LIKE(Wordpress自定义高级搜索)将所有多对一进行匹配的SQL
我有3个表,我想在其中检索符合所有搜索条件的帖子。标准是可能有一个或多个值的分类法。例如,查找分类法“媒介”与“丙烯酸”和“油”匹配的帖子 下面是我想做的一个示例查询,但显然不起作用:使用LIKE(Wordpress自定义高级搜索)将所有多对一进行匹配的SQL,sql,one-to-many,Sql,One To Many,我有3个表,我想在其中检索符合所有搜索条件的帖子。标准是可能有一个或多个值的分类法。例如,查找分类法“媒介”与“丙烯酸”和“油”匹配的帖子 下面是我想做的一个示例查询,但显然不起作用: SELECT DISTINCT p.* FROM wp_posts p LEFT JOIN wp_term_relationships txrm ON p.ID = txrm.object_id LEFT JOIN wp_term_taxonomy txm ON txrm.term_taxonomy_id =
SELECT DISTINCT p.* FROM wp_posts p
LEFT JOIN wp_term_relationships txrm ON p.ID = txrm.object_id
LEFT JOIN wp_term_taxonomy txm ON txrm.term_taxonomy_id = txm.term_taxonomy_id
LEFT JOIN wp_terms trm ON txm.term_id = trm.term_id
WHERE txm.taxonomy= 'mediums' AND ( trm.name LIKE '%Acrylic%' AND trm.name LIKE '%Oil%' )
AND p.post_status = 'publish'
AND p.post_type = 'gallery'
GROUP BY p.ID
ORDER BY p.post_date DESC
我该怎么做
谢谢以防万一有人在找类似的东西,这就是我的选择,它很有效,但我不确定它的效率有多高:
SELECT DISTINCT p.* FROM wp_posts p
INNER JOIN (
SELECT txrm.object_id
FROM wp_term_relationships txrm
LEFT JOIN wp_term_taxonomy txm ON txrm.term_taxonomy_id = txm.term_taxonomy_id
LEFT JOIN wp_terms trm ON txm.term_id = trm.term_id
WHERE txm.taxonomy = 'mediums'
AND ( trm.name LIKE '%Acrylic%' OR trm.name LIKE '%Oil%' )
GROUP BY txrm.object_id
HAVING count(trm.name) = 2
) AS trm ON p.ID = trm.object_id
WHERE p.post_status = 'publish'
AND p.post_type = 'gallery'
GROUP BY p.ID
ORDER BY p.post_date DESC
因此,子查询返回一个post\u id/object\u id列表,其计数为2:
object_id|term.name
1 |oil
1 |acrylic
2 |oil
所以在上面的例子中,只有post 1的计数为2,因为它同时匹配油和丙烯酸