我很难理解编写高级select查询的正确方法。我这里有以下代码。
if (!empty($_GET[\'3321body_type\'])) {
$bt = $_GET[\'3321body_type\'];
$bt_sql = "AND m1.meta_key = \'body_type\' AND m1.meta_value = \'$bt\'";
}
else $bt_sql = \'\';
if (!empty($_GET[\'3321Make\'])) {
$make = $_GET[\'3321Make\'];
$make_sql = "AND m3.meta_key = \'Make\' AND m3.meta_value = \'$make\'";
}
else $make_sql = \'\';
if (!empty($_GET[\'3321Model\'])) {
$model = $_GET[\'3321Model\'];
$model_sql = "AND m4.meta_key = \'Model\' AND m4.meta_value = \'$model\'";
}
else $model_sql = \'\';
if (!empty($_GET[\'3321Year\'])) {
$year = $_GET[\'3321Year\'];
$year_sql = " AND m2.meta_key = \'Year\' AND m2.meta_key = \'Year\' AND
m2.meta_value BETWEEN \'$year\' AND \'9999\'";
}
else $year_sql = \'\';
global $wpdb;
$wpdb->show_errors = true;
$querystr = "
SELECT * FROM wp_posts
LEFT JOIN wp_postmeta m0 on (wp_posts.ID = m0.post_id)
LEFT JOIN wp_postmeta m1 on (wp_posts.ID = m1.post_id)
LEFT JOIN wp_postmeta m2 on (wp_posts.ID = m2.post_id)
LEFT JOIN wp_postmeta m3 on (wp_posts.ID = m3.post_id)
LEFT JOIN wp_postmeta m4 on (wp_posts.ID = m4.post_id)
WHERE wp_posts.ID = m0.post_ID
" . $bt_sql . "
" . $make_sql . "
" . $model_sql . "
" . $year_sql . "
";
$search = $wpdb->get_results($querystr, OBJECT);
foreach($search as $post) {
setup_postdata($post);
如果我这样写出来SELECT * FROM wp_posts
LEFT JOIN wp_postmeta m0 on (wp_posts.ID = m0.post_id)
LEFT JOIN wp_postmeta m1 on (wp_posts.ID = m1.post_id)
LEFT JOIN wp_postmeta m2 on (wp_posts.ID = m2.post_id)
LEFT JOIN wp_postmeta m3 on (wp_posts.ID = m3.post_id)
LEFT JOIN wp_postmeta m4 on (wp_posts.ID = m4.post_id)
WHERE wp_posts.ID = m0.post_ID
AND m1.meta_key = \'body_type\' AND m1.meta_value = \'Sedan\'
AND m3.meta_key = \'Make\' AND m3.meta_value = \'Acura\'
AND m4.meta_key = \'Model\' AND m4.meta_value = \'CL\'
AND m2.meta_key = \'Year\' AND m2.meta_key = \'Year\' AND m2.meta_value BETWEEN \'$year\' AND \'9999\'
结果很好。但当我在第一段代码中添加条件语句时。连接似乎工作不正常,因为它返回重复的行。谁能告诉我如何正确地编写此语句以使搜索查询动态化?这也是一个如何在工程中使用wpdb->prepare的示例。