Cara Menambahkan Indeks ke tabel Database Plugin

10

Saya telah membuat beberapa tabel tambahan untuk plugin yang saya kembangkan dan perlu menambahkan indeks ke tabel ini.

Apa cara WordPress untuk melakukan ini?

Penggunaan dbDelta()tampaknya tidak berfungsi, dan saya tidak melihat kesalahan apa pun dalam log.

susu
sumber

Jawaban:

4

Anda dapat menjalankan pernyataan SQL sewenang - wenang dengan wpdb :: query () , termasuk Pernyataan Definisi Data, mis

function
create_index ()
{
    global $wpdb ;

    $sql = "CREATE INDEX my_index ON {$wpdb->prefix}my_table (my_column)" ;

    $wpdb->query ($sql) ;

    return ;
}

Catatan: Karena $wpdb->query()dapat mengeksekusi SQL arbitrer , jika pernyataan yang Anda berikan berisi input pengguna APAPUN , maka Anda harus menggunakan wpdb :: prepar () untuk melindungi terhadap serangan SQL Injection.

Tetapi ini menimbulkan pertanyaan: bagaimana Anda membuat tabel khusus plugin Anda? "Secara manual" atau secara terprogram? Jika terprogram, apakah Anda tidak menggunakannya $wpdb->query()? Jika Anda melakukannya "secara manual", maka Anda harus membuat tabel (dan indeksnya) saat aktivasi plugin.

Lihat jawaban yang sangat baik untuk pertanyaan WPSE ini lainnya untuk cara menghubungkan ke aktivasi plugin (dan / atau menonaktifkan dan menghapus instalan) untuk melakukan hal-hal seperti membuat tabel pribadi.

Paul 'Sparrow Hawk' Biron
sumber
Terima kasih telah menjawab pertanyaan ini meskipun sudah berusia 5 bulan. Saya akhirnya melakukan ini tetapi tidak yakin apakah itu "cara yang benar". Akan sangat membantu saat berikutnya saya mencoba melakukan ini.
Milk
@Milk kesenangan saya. Saya pikir Anda sudah menyelesaikan masalah Anda atau menyerah :-) Saya menjawabnya (bahkan 5m setelah Anda bertanya) untuk membantu orang lain yang memiliki masalah yang sama dan mencari WPSE dan menemukan pertanyaan Anda.
Paul 'Sparrow Hawk' Biron
3

Menggunakan dbDelta, di atas KUNCI UTAMA, Anda dapat memasukkan kata KUNCI untuk membuat indeks untuk kolom lain:

Anda harus menggunakan kata kunci KEY daripada sinonim INDEX dan Anda harus memasukkan setidaknya satu KUNCI.

Contoh dari schema.php dalam inti:

CREATE TABLE $wpdb->termmeta (
  meta_id bigint(20) unsigned NOT NULL auto_increment,
  term_id bigint(20) unsigned NOT NULL default '0',
  meta_key varchar(255) default NULL,
  meta_value longtext,
  PRIMARY KEY  (meta_id),
  KEY term_id (term_id),
  KEY meta_key (meta_key($max_index_length))
) $charset_collate;

Sumber: codex - Membuat Tabel dengan Plugins

froger.me
sumber