php – 如何通过某个meta_key计算meta_value在列中出现的次数?
我试图从WordPress中的数据库查询我的表中的列上每条记录存在多少次并导出该列.我该怎么办?
在excel导出中,我希望meta_value中的列包含meta_key“user_valid”,列中包含meta_value在mysql列中存在的次数. meta_key meta_value user_valid '1,2,3' user_valid '1,1' user_valid '1,3' 要使用meta_key’user_valid’导出列’meta_value’,我使用了: SELECT meta_value FROM `us_test` WHERE meta_key = 'user_valid' 在使用此查询后,我使用MYSQL中的导出按钮导出. 我不知道如何对其他列进行查询. 我认为它应该是这样的,但我不确定,因为当我使用下一个查询时,它不会返回所有记录: SELECT meta_value,COUNT( * ) c FROM `us_test` WHERE meta_key = 'user_valid' GROUP BY meta_value
这里有两个选项,Wordpress方式和另一种方式SQL.
就在我开始之前,你永远不应该对数据库名称进行硬编码,问题是,如果你将代码移动到具有不同数据库名称的另一个网站,你需要在所有查询中更改数据库名称,当你更改您正在使用的站点上的数据库名称.如果您忘记这一点,这可以让您进行疯狂的追逐 您应始终始终清理并验证输入数据,以确保可以安全地防止将任何恶意代码注入您的站点. SQL注入很常见,许多黑客使用SQL注入来破解网站 SQL 由于动态性较差,SQL可以减少一点控制.例如,如果您只需要获取某个术语的计数,则需要直接更改查询,否则您需要实现某种过滤系统. 正如我所说,永远不要硬编码db名称,而是使用wpdb类来设置前缀.这将避免问题的发生.另外,正如我所说,你必须清理以避免SQL注入,在这种情况下,我们将使用wpdb类的prepare方法来处理卫生并防止SQL注入. 这是函数,我在这里和那里评论有意义: function get_post_meta_key_count( $key = '',$value = '',$type = 'post',$status = 'publish' ) { // Use $wpdb to avoid bugs and errors,do not hardcode db names global $wpdb; if( empty( $key ) ) return; // Set the default WHERE clause where we return the count of the key regardless of value $where = $wpdb->prepare( " pm.meta_key = '%s' AND p.post_type = '%s' AND p.post_status = '%s' ",$key,$type,$status ); // If a value is specified,add that to the WHERE clause if ( $value ) { $where .= $wpdb->prepare( " AND pm.meta_value = '%s' ",$value ); } // Query the db to return the post count according to key and value if value is set $count = $wpdb->get_var( " SELECT count(DISTINCT pm.post_id) FROM {$wpdb->postmeta} pm JOIN {$wpdb->posts} p ON (p.ID = pm.post_id) WHERE {$where} " ); return $count; } 我在这里做的是,如果您需要获取特定元键的特定元值的计数,我已设置参数. 用法 您现在可以使用以下功能: > echo get_post_meta_key_count(‘my_key’);对于默认帖子类型帖子的met??a_key my_key的帖子计数和仅发布的帖子 WP_Query 如果您正在寻找构建方法(这应该始终是您的第一个选项),您可以使用WP_Query类来执行此操作. 使用WP_Query的问题在于,如果使用不正确,它可能会非常昂贵.许多人因此而避免使用WP_Query,或者在不知情的情况下运行非常昂贵且不必要的查询.因此,我们将研究一种与自定义SQL查询一样快的方法. WP_Query在自定义SQL查询之上的真正优势是,您可以通过简单地传递所需的参数来调整查询,WP_Query将始终负责根据传递的参数构建正确的SQL查询. 让我们看一下优化WP_Query,以便只返回一个帖子计数 >首先,我们只会查询一个帖子.默认情况下,WP_Query构建为无论查询了多少帖子(1,100或所有帖子),WP_Query将继续查找与查询匹配的所有帖子,即使它已找到并返回查询的帖子数量.这样做的原因是分页.为了正确计算分页,WP_Query需要知道有多少帖子与查询匹配. 因此,WP_Query在返回查询的帖子数量后继续查看数据库,以便计算与查询匹配的所有帖子.此帖子计数存储在查询的$found_posts属性中,并且此数字与posts_per_page结合使用,后者用于计算将有多少页面. 虽然get_posts使用WP_Query,但这对get_posts不起作用. get_posts传递’no_found_rows’=>对于WP_Query,如果找到查询的帖子数量,则会立即中断查询.这合法地破坏了分页,这就是为什么get_posts正确地分页是如此令人头痛的原因 那么让我们来看看这个功能: function get_post_meta_key_count( $key = '',$args = [] ) { // If the $key value is empty,bail if( empty( $key ) ) return; // Set the defaults and override any value set for the specific default $args['posts_per_page'] = 1; $args['fields'] = 'ids'; if ( $value ) { $args['meta_query'][] = [ 'key' => $key,'value' => $value ]; } else { $args['meta_query'][] = [ 'key' => $key,]; } $q = new WP_Query( $args ); // Return the post count return $q->found_posts; } 用法 默认情况下,WP_Query使用帖子后类型并发布为帖子状态,因此我们不需要为正常发布的帖子设置此项.我在这里添加了一个名为$args的第三个参数,该参数接受与WP_Query类完全相同的参数,因为它们都直接传递给WP_Query.因此,您可以在此处添加任何参数以从特定元键或值中获取计数 > echo get_post_meta_key_count(‘my_key’);对于默认帖子类型帖子的met??a_key my_key的帖子计数和仅发布的帖子 对具有24个帖子的met??a_key进行性能测试 > SQL – > 1个查询/ – 0.005秒 正如您所看到的,性能上存在微小的差异,因此WP_Query方法很容易成为最佳选择,因为它更加动态,即使只是稍微慢一点 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |