这令人抓狂。我似乎无法弄清楚什么似乎是一件容易的事。我正在为销售二手房车的 Wordpress 网站构建自定义搜索功能。我正在使用 Woocommerce 对产品进行分类(可能并不重要,因为它只是创建了一个带有 post_type=product 而不是 post_type=post 的产品)。
我正在使用自定义字段来定义选项,例如车辆的“Class”(例如“Class A”、“Class B”、“Class C”等)和“Fuel Type”(例如“Gasoline”、“Diesel”、 '可牵引')。因此,每个产品对于同一个 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 'Class 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 运算符一起工作。这对我来说似乎是正确的,但它不起作用。奇怪的是,如果我在第 5 行将 AND 更改为 OR,它会起作用,但不会返回我想要的结果,因为它会扩展搜索而不是缩小搜索范围。
任何帮助是极大的赞赏。如果有人知道如何解决这个问题,我也愿意尝试其他方法,因为我可能做错了。我是一名设计师,最近刚转为程序员,我的专业水平充其量只是中等水平,所以请善待。