首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wordpress自定义搜索

Wordpress自定义搜索
EN

Stack Overflow用户
提问于 2012-09-07 08:28:04
回答 1查看 322关注 0票数 0

这太让人抓狂了。我似乎想不出什么是一件容易做的事情。我正在为一个出售二手房车的Wordpress网站构建一个自定义搜索功能。我正在使用Woocommerce对产品进行分类(可能并不重要,因为它只是创建了一个带有post_type=product而不是post_type=post的产品)。

我正在使用自定义字段来定义选项,例如车辆的“Class”(例如“A类”、“B类”、“C类”等)和‘燃料类型’(例如‘加油站’,‘柴油’,‘拖车’)。因此,每个产品对于同一个meta_value可以有一个不同的meta_key,但每个meta_key只能定义一次,并且每个meta_value只能有一个meta_key。

搜索表单的一部分看起来像这样。(还有更多,但这就是我们目前需要担心的全部)

代码语言:javascript
复制
<h4>Type / Class</h4>

<label><input type="checkbox" name="a1" value="0" />All Types</label>
<label><input type="checkbox" name="a2" value="Class A" />"Class A" RV's</label>
<label><input type="checkbox" name="a3" value="Class B" />"Class B" RV's</label>
<label><input type="checkbox" name="a4" value="Class C" />"Class C" RV's</label>
<label><input type="checkbox" name="a5" value="Fifth Wheel" />Fifth Wheel RV's</label>
<label><input type="checkbox" name="a6" value="Toy Hauler" />Toy Haulers</label>
<label><input type="checkbox" name="a7" value="Travel Trailer" />Travel Trailer RV's</label>
<label><input type="checkbox" name="a8" value="Camping Trailer" />Camping Trailers</label>

<h4>Engine Type</h4>

<label><input type="checkbox" name="c1" value="0" />All Engine Types</label>
<label><input type="checkbox" name="c2" value="Gasoline" />Gasoline</label>
<label><input type="checkbox" name="c3" value="Diesel" />Diesel</label>
<label><input type="checkbox" name="c4" value="Towable" />Towable</label>

它被发送来运行以下查询并返回结果。

代码语言:javascript
复制
$result = mysql_query("
            SELECT * FROM wp_postmeta 
            WHERE 
            (meta_key= 'class' AND (meta_value = '$a2' OR meta_value = '$a3' OR meta_value = '$a4' OR meta_value = '$a5' OR meta_value = '$a6' OR meta_value = '$a7' OR meta_value = '$a8'))
            ");

这是这样做的:如果选择了框,则为所选选项的url中的选项传递真参数(1)。site.com/search/?a2=1&a4=1,如果选择了'Class A‘和'Class C’)。这似乎工作得很好。

但是,当我尝试使用这个新查询搜索另一个meta_key及其值的组合时……

代码语言:javascript
复制
$result = mysql_query("
            SELECT * FROM wp_postmeta 
            WHERE 
            (meta_key= 'class' AND (meta_value = '$a2' OR meta_value = '$a3' OR meta_value = '$a4' OR meta_value = '$a5' OR meta_value = '$a6' OR meta_value = '$a7' OR meta_value = '$a8'))
            AND
            (meta_key= 'fuel' AND (meta_value = '$c2' OR meta_value = '$c3' OR meta_value = '$c4'))
            ");

..。它不再工作了:(每个meta_key语句将独立工作,但不能使用AND运算符一起工作。这对我来说似乎是对的,但它不起作用。奇怪的是,如果我在第5行将AND更改为OR,它可以工作,但不会返回我想要的结果,因为它扩大了搜索范围,而不是缩小了搜索范围。

任何帮助都是非常感谢的。如果有人知道如何做到这一点,我也愿意尝试其他方法,因为我可能做错了。我是一名设计师,最近成为程序员,我的专业水平最多也就是中等水平,所以请仁慈。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-08 07:23:40

这是一个关于如何编写SQL查询的错误。wp_postmeta中的每条记录只能有一个meta_key值,但是您正在尝试匹配多个meta_key值,这就是为什么您看不到任何结果返回的原因,因为没有记录与您的查询匹配。

为了返回您要查找的数据,您需要为您想要查找的每个唯一的meta_key条件连接表。

像这样的东西应该是你要找的东西。

代码语言:javascript
复制
SELECT distinct(m1.post_id) as post_id FROM 
    wp_postmeta m1, 
    wp_postmeta m2
WHERE
    m1.post_id=m2.post_id AND
    (m1.meta_key='class' AND (m1.meta_value IN ('$a2','$a3','$a4','$a5','$a6','$a7','$a8'))) AND
    (m2.meta_key='fuel' AND (m2.meta_value IN ('$c2','$c3','$c4')))

您将需要根据设置的搜索选项构建SQL查询。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12310229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档