gpt4 book ai didi

mysql - WordPress 自定义搜索

转载 作者:行者123 更新时间:2023-11-29 06:04:16 25 4
gpt4 key购买 nike

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

我使用自定义字段来定义选项,例如车辆的“类别”(例如“A 类”、“B 类”、“C 类”等)和“燃料类型”(例如“汽油”、“柴油机”、“可牵引”)。因此,每个产品对于相同的meta_key可能有不同的meta_value,但每个meta_key只能定义一次,并且每个meta_key只能有一个meta_value。

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

<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>

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

$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 中的选项传递一个 true 参数 (1)(例如 site.com/search/?a2=1&a4=1 if '选择“A 类”和“C 类”)。这似乎工作正常。

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

$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运算符一起工作。这对我来说似乎是正确的,但它不起作用。但奇怪的是,如果我在行中将AND更改为OR 5 它可以工作,但不会返回我想要的结果,因为它扩大了搜索而不是缩小了搜索范围。

非常感谢任何帮助。如果有人知道如何实现这一点,我也愿意尝试其他方法,因为我可能会做错所有事情。我首先是一名设计师,最近转为程序员,我的专业知识水平充其量只是中等,所以请善待。

最佳答案

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

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

类似的东西应该是您所寻找的。

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 查询。

关于mysql - WordPress 自定义搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12310229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com