Mysql query LIKE not working

时间:2012-02-11 作者:PrivateUser

我正在使用此代码。

$blog_list = $wpdb->get_results( "SELECT " . $extra . "blog_id, last_updated FROM " . $wpdb->blogs. " WHERE public = \'1\' AND archived = \'0\' AND mature = \'0\' AND spam = \'0\' AND deleted =\'0\' AND UPPER(blog_name) LIKE \'A%\'" . $order . " " . $limit . "", ARRAY_A );
但那就像是一句话AND UPPER(blog_name) LIKE \'A%\'" 不工作。有人能给我答案吗?

谢谢

更新:

实际上我正在使用此代码

$where = \'\'; 
if ($filter) { 
$where = "AND UPPER(blog_name) LIKE \'".strtoupper($filter)."%\' "; 
}
所以我会替换AND UPPER(blog_name) LIKE \'A%\'" 具有$where 后来

注意:我的网络中有500多个博客。

我想在页面中显示所有带有锚定链接的博客名称。但我不想加载所有的博客名称。所以我尝试实现字母导航。如果用户单击链接“A”,则页面应显示以“A”开头的博客名称。同样,B、C等。

这是full code 如果有人感兴趣

2 个回复
最合适的回答,由SO网友:kaiser 整理而成

准备您的查询

global $wpdb;
$wpdb->get_results( 
    $wpdb->prepare( 
        "SELECT %s blog_id, last_updated FROM %s WHERE public = \'1\' AND archived = \'0\' AND mature = \'0\' AND spam = \'0\' AND deleted =\'0\' AND UPPER(blog_name) LIKE \'%s\' %s %s ", ARRAY_A 
    ),
    $extra,
    $wpdb->blogs,
    $wpdb->esc_like( \'A%\' ),
    $order,
    $limit
);
Never ever send data without prepare! 还有:有一些函数like_escape() 这将帮助您正确准备数据。

还想知道你为什么要搜索A%&hellip

SO网友:Scott

凯撒所说的话:

此表中没有blog\\u name字段。。。您的查询似乎包含其他一些SQL,但如果没有这些SQL,我们就无法判断出哪里出了问题。

where is blog_name

Update博客名称所在的唯一位置是在个人博客选项表中。因此,要想做你想做的事,你必须这样做:

读出你所有的博客IDpublic = 1 && achieved = 0 && mature = 0 && spam = 0 && deleted = 0. 这是一个查询,在您的情况下,它将返回大约500条记录。然后,对于每条记录,您必须阅读每个博客选项表{prefix}_{ID}_options 并找到具有option_name = \'blogname\' 然后检查记录是否以选择字母开头。

也许在一个大型MySQL查询中可以实现上述功能,但我不想把它放在一起。

我再也忍不住了。如果是我想做你想做的事,我会考虑创建一个自己的新表,并用我需要搜索的信息保持最新。我会使用可用的挂钩来确保在添加/更新/删除新站点时,它会更新我创建的这个表。

结束

相关推荐

使用TERM_TASTIONY_ID值设置wp_postmeta的MySQL查询

我需要设置wp_postmeta 值(表中:wp_postmeta) 在每个有特定term_taxonomy_id (表中:wp_term_relationships):具体而言:对每个post_ID 那已经term_taxonomy_id 如果wp_postmeta 为此post_ID 不包含_category_permalink_ 然后用设置为18的值添加它,否则忽略它,因为我的MySQL foo很差,所以如果这没有意义,或者我的表和名称有误,请道歉。UPDATE:关于@deadlyhifi和@Jo