bestsource

Wordpress 다중 사이트 설치(3.0)에서 모든 블로그 옵션 테이블을 동시에 쿼리하려면 어떻게 해야 합니까?

bestsource 2023. 2. 23. 22:57
반응형

Wordpress 다중 사이트 설치(3.0)에서 모든 블로그 옵션 테이블을 동시에 쿼리하려면 어떻게 해야 합니까?

Wordpress 3.0 멀티 사이트 설치에서는 '플랫폼'이라고 불리는 모든 블로그에 대한 커스텀 옵션이 있습니다.관리자는 블로그를 작성하거나 편집할 때 이 플랫폼의 값을 입력할 수 있습니다.일부 블로그에는 플랫폼이 없을 수 있습니다.

모든 플랫폼과 관련 블로그 목록을 작성할 수 있어야 합니다.문제는 다른 사이트 메커니즘을 통해 블로그를 동적으로 작성 및 삭제하기 때문에 반드시 연속되지 않는 번호를 가진 블로그 옵션테이블이 많이 있습니다(즉, wp_2_contract, wp_4_contract, wp_12_contract 등)

Wordpress에서 모든 블로그에서 옵션을 선택할 수 있는 방법이 있습니까?반대로 수동으로 실행할 수 있는 쿼리가 있습니까?난 이런 걸 시도해봤지만 아무 소용이 없었어

T WHERE option_namen_n'플랫폼'으로 * FROM information_breaks.wp_%_breaks'와 같은SELECT table_name WHERE WHERE table_name WERE option_n'플랫폼'을 선택합니다.

내가 하려는 게 말이 되나요?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 데이터베이스를 직접 쿼리하려면 프로시저를 생성하여 사용할 수 있습니다.

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');

언급URL : https://stackoverflow.com/questions/3817540/how-can-i-simultaneously-query-all-blog-options-table-in-a-wordpress-multisite-i

반응형