php – 使用查询创建高级搜索时出现的问题
发布时间:2020-12-13 17:23:48 所属栏目:PHP教程 来源:网络整理
导读:我在使用自定义查询创建高级搜索并使用$wpdb- get_results($query,OBJECT)时遇到问题; 在wordpress中的普通搜索中,当我们搜索xxx yyyy或搜索yyyy xxx时,我们有相同的结果,这很好. 但是当我被迫使用查询来创建高级搜索时,搜索字段中的单词序列很重要,而且xxx
我在使用自定义查询创建高级搜索并使用$wpdb-> get_results($query,OBJECT)时遇到问题;
在wordpress中的普通搜索中,当我们搜索xxx yyyy或搜索yyyy xxx时,我们有相同的结果,这很好. <?php $t = $_REQUEST['title']; $a = $_REQUEST['author']; global $wpdb; $query = "SELECT DISTINCT wp_posts.* FROM wp_posts,wp_postmeta WHERE wp_posts.ID = wp_postmeta.post_id"; if ($t != '') { $t_sql = " AND wp_posts.post_title like '%$t%' "; } if ($a != '') { $a_sql = " AND wp_postmeta.meta_key = 'Author' AND wp_postmeta.meta_value like '%$a%' "; } $query .= $t_sql; $query .= $a_sql; $pageposts = $wpdb->get_results($query,OBJECT); global $post; if ($pageposts): foreach ($pageposts as $post): setup_postdata($post); //... endforeach; endif; ?> 在你的想法中,我该怎么办? 解决方法
您可以按空格字符拆分搜索字词,然后构建查询以查找字词的每个可能顺序.以下是Title字段的示例:
// Assuming the title is "One Two Three" $t = $_REQUEST['title']; // Split the TITLE by space character $terms = explode(' ',$t); // $terms = ["One","Two","Three"] // Concats each search term with a LIKE operator $temp = array(); foreach ($terms as $term) { $temp[] = "title LIKE '%".$term."%'"; // $temp = ["title LIKE %One%","title LIKE %Two%",... } // Adds an AND operator for each $temp to the query statement $query = "SELECT * FROM titleTable WHERE (".implode(' AND ',$temp).")"; // $query = SELECT * FROM titleTable WHERE // (title LIKE '%One%' AND title LIKE '%Two%' AND title LIKE '%Three%') (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |