プラグインデータベーステーブルにインデックスを追加する方法


10

開発中のプラグイン用に追加のテーブルをいくつか作成しました。これらのテーブルにインデックスを追加する必要があります。

これを行うWordPressの方法は何ですか?

を使用dbDelta()しても動作していないようで、ログにエラーが表示されません。

回答:


4

wpdb :: query()を使用すると、データ定義ステートメントなど、任意の SQLステートメントを実行できます。

function
create_index ()
{
    global $wpdb ;

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

    $wpdb->query ($sql) ;

    return ;
}

注:ので$wpdb->query()、実行することができ、任意のあなたがそれに渡す文が含まれている場合は、SQLをANYユーザー入力を、そしてあなたが使うべきwpdbを::()を準備し、SQLインジェクション攻撃から保護します。

しかし、これは問題を引き起こします:どのようにしてプラグイン固有のテーブルを作成しましたか?「手動で」またはプログラムで?プログラムで使用する場合、使用しませんでした$wpdb->query()か?「手動」で行った場合は、プラグインのアクティブ化時にテーブル(およびそのインデックス)を実際に作成する必要があります。

プラグインのアクティブ化(および/または非アクティブ化とアンインストール)をフックしてプライベートテーブルを作成する方法については、この他のWPSE質問に対する優れた回答を参照してください。


生後5か月ですが、この質問に回答していただきありがとうございます。私はこれをやったが、それが「正しい方法」であるかどうかはわからなかった。次回これをやろうとすると、大きな助けになります。
ミルク

@ミルク私の喜び。私はあなたがすでにあなたの問題を解決したか、あきらめたかと思っていました:-)同じ問題を抱えている他の人を助け、WPSEを検索してあなたの質問に出くわすために私は答えました(あなたが尋ねた後も5ヶ月)。
Paul 'Sparrow Hawk' Biron

3

PRIMARY KEYの上にdbDeltaを使用すると、KEYという単語を含めて、他の列のインデックスを作成できます。

同義語のINDEXではなくキーワードKEYを使用し、少なくとも1つのKEYを含める必要があります。

コアのschema.phpの例:

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;

ソース:codex-プラグインを使用したテーブルの作成

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.