Mic*_*tty 10 mysql sql wordpress
在我们的Wordpress 3.0多站点安装中,我们为所有博客提供了一个自定义选项,称为"平台".管理员可以在创建或编辑博客时输入此平台的值.有些博客可能没有平台.
我们需要能够创建所有平台及其相关博客的列表.问题是,我们通过其他站点机制动态创建和删除博客,因此我们有许多博客选项表,其中的数字不一定是连续的.(即wp_2_options,wp_4_options,wp_12_options等)
我的问题是,在Wordpress中有没有办法在所有博客中获取选项?相反,是否有可以运行的查询可以手动执行此操作?我尝试过这样的事情没有效果:
SELECT*FROM(SELECT table_name FROM information_schema.tables WHERE table_name like'wp _%_ options')as t WHERE option_name ='platform'
我想要做什么才有意义?我再次为我缺乏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);
Run Code Online (Sandbox Code Playgroud)
如果要直接查询MySQL数据库,可以创建一个过程并使用它:
use wordpress;
Drop Procedure IF EXISTS wordpress.MyProcedure;
DELIMITER | ;
CREATE PROCEDURE MyProcedure (param1 VARCHAR(30))
BEGIN
DECLARE tbname CHAR(50);
DECLARE endfetch INT DEFAULT 0;
DECLARE cur1 CURSOR FOR
SELECT table_name FROM information_schema.tables WHERE table_schema='wordpress' and table_name like '%options';
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'
SET endfetch = 1;
OPEN cur1;
FETCH cur1 INTO tbname;
fetchloop: WHILE NOT endfetch DO
SELECT tbname ;
SET @opt = param1;
SET @table_name = tbname;
SET @sql_text = concat('SELECT option_value FROM ',@table_name,' WHERE option_name=''',@opt,'''');
PREPARE stmt FROM @sql_text;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
FETCH cur1 INTO tbname;
END WHILE fetchloop;
END
|
DELIMITER ; |
CALL MyProcedure('siteurl');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2836 次 |
| 最近记录: |