Bug #12203 » dedupe-blogmeta.php
| 1 |
<?php
|
|---|---|
| 2 |
|
| 3 |
global $wpdb, $bp; |
| 4 |
|
| 5 |
$blog_ids = $wpdb->get_col( "SELECT DISTINCT blog_id FROM {$bp->blogs->table_name_blogmeta}" ); |
| 6 |
|
| 7 |
$has_dupes = []; |
| 8 |
foreach ( $blog_ids as $blog_id ) { |
| 9 |
$blog_metas = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$bp->blogs->table_name_blogmeta} WHERE blog_id = %d", $blog_id ) ); |
| 10 |
|
| 11 |
$blog_meta_ids = []; |
| 12 |
foreach ( $blog_metas as $blog_meta ) { |
| 13 |
$key = $blog_meta->meta_key; |
| 14 |
$value = $blog_meta->meta_value; |
| 15 |
if ( ! isset( $blog_meta_ids[ $key ][ $value ] ) ) { |
| 16 |
$blog_meta_ids[ $key ][ $value ] = 0; |
| 17 |
}
|
| 18 |
|
| 19 |
$blog_meta_ids[ $key ][ $value ]++; |
| 20 |
}
|
| 21 |
|
| 22 |
foreach ( $blog_meta_ids as $the_key => $values ) { |
| 23 |
foreach ( $values as $value => $count ) { |
| 24 |
if ( $count > 1 ) { |
| 25 |
$has_dupes[ $blog_id ][] = $the_key; |
| 26 |
break; |
| 27 |
}
|
| 28 |
}
|
| 29 |
}
|
| 30 |
}
|
| 31 |
|
| 32 |
foreach ( $has_dupes as $blog_id => $dupe_keys ) { |
| 33 |
foreach ( $dupe_keys as $dupe_key ) { |
| 34 |
$dupe_ids = $wpdb->get_col( $wpdb->prepare( "SELECT id FROM {$bp->blogs->table_name_blogmeta} WHERE blog_id = %d and meta_key = %s LIMIT 1, 1000", $blog_id, $dupe_key ) ); |
| 35 |
|
| 36 |
$dupe_ids_sql = implode( ',', array_map( 'intval', $dupe_ids ) ); |
| 37 |
|
| 38 |
$wpdb->query( "DELETE FROM {$bp->blogs->table_name_blogmeta} WHERE id in ({$dupe_ids_sql})" ); |
| 39 |
}
|
| 40 |
}
|