这太让人抓狂了。我似乎想不出什么是一件容易做的事情。我正在为一个出售二手房车的Wordpress网站构建一个自定义搜索功能。我正在使用Woocommerce对产品进行分类(可能并不重要,因为它只是创建了一个带有post_type=product而不是post_type=post的产品)。
我正在使用自定义字段来定义选项,例如车辆的“Class”(例如“A类”、“B类”、“C类”等)和‘燃料类型’(例如‘加油站’,‘柴油’,‘拖车’)。因此,每个产品对于同一个meta_value可以有一个不同的meta_key,但每个meta_key只能定义一次,并且每个meta_value只能有一个meta_key。
搜索表单的一部分看起来像这样。(还有更多,但这就是我们目前需要担心的全部)
<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中的选项传递真参数(1)。site.com/search/?a2=1&a4=1,如果选择了'Class A‘和'Class 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,它可以工作,但不会返回我想要的结果,因为它扩大了搜索范围,而不是缩小了搜索范围。
任何帮助都是非常感谢的。如果有人知道如何做到这一点,我也愿意尝试其他方法,因为我可能做错了。我是一名设计师,最近成为程序员,我的专业水平最多也就是中等水平,所以请仁慈。
发布于 2012-09-08 07:23:40
这是一个关于如何编写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查询。
https://stackoverflow.com/questions/12310229
复制相似问题