mysql - 如何同时查询 Wordpress 多站点安装 (3.0) 中的所有博客选项表?

标签 mysql sql wordpress

在我们的 Wordpress 3.0 多站点安装中,我们为所有博客提供了一个自定义选项,称为“平台”。管理员可以在创建或编辑博客时输入此平台的值。有些博客可能没有平台。

我们需要能够创建所有平台及其相关博客的列表。问题是,我们通过其他站点机制动态创建和删除博客,所以我们有很多博客选项表,其中的数字不一定是连续的。 (即wp_2_options、wp_4_options、wp_12_options等)

我的问题是,在 Wordpress 中有没有办法在所有博客中获取一个选项?相反,我可以运行一个手动执行此操作的查询吗?我试过这样的东西没有效果:

选择 * 从 (选择表名 FROM information_schema.tables WHERE table_name like 'wp_%_options') as t WHERE option_name='平台'

我正在尝试做的事情有意义吗?再次,我为我缺乏 MySql 知识而道歉,但我无法找到任何关于如何做到这一点的答案。我也可以先查询所有这些表名,然后分别查询每个表,但这不是一个真正的选择,因为我们有很多博客,我们可能需要同时为许多页面请求运行此查询,这将添加数百个对每个请求的查询。

如果你们能提供任何建议或帮助,我们将不胜感激。

最佳答案

如果有人感兴趣,我最终会这样做(但我仍然想知道是否可以使用 LIKE 搜索表名,然后查询这些表,如果有人知道的话)。

// so get all the blog ids from the blogs table
$blogs = $wpdb->get_results("SELECT blog_id FROM {$wpdb->blogs}", ARRAY_A);

// build a sql statement for each blog options table, adding in the blog id for each row
$select_statements = array();
foreach ($blogs as $blog_row) {
    $select_statements[] = 'SELECT option_value, CAST( '.$blog_row['blog_id'].' AS UNSIGNED INTEGER ) AS blog_id FROM '.$wpdb->get_blog_prefix($blog_row['blog_id'])."options WHERE option_name='$option_name'";
}

// cache the results of the union of all these select statements
$option_results = $wpdb->get_results(implode(' UNION ALL ', $select_statements), ARRAY_A);

关于mysql - 如何同时查询 Wordpress 多站点安装 (3.0) 中的所有博客选项表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3817540/

相关文章:

wordpress - 使用未经清理的名称值按名称获取术语

javascript - Wordpress 类似管理员的菜单

php - 如何查询未知变量?

java - 更新: Problem with executing SQL query from Java

javascript - IBM Worklight - 无法显示使用 SQL 适配器检索的数据

mysql - 仅当列为空时才更新列——在replace into语句中

php - 如何从它的 Slug 中获取 WooCommerce 产品 ID?

java - DbUnit:NoSuchColumnException 和区分大小写

c# - 尝试插入数据表的数组值时出现 SQL 语法错误

SQLite View : Add a column based on some other column