Как добавить индекс в таблицу базы данных плагинов

10

Я создал несколько дополнительных таблиц для плагина, который я разрабатываю, и мне нужно добавить индексы к этим таблицам.

Что WordPress способ сделать это?

Использование dbDelta(), похоже, не работает, и я не вижу ошибок в журналах.

Молоко
источник

Ответы:

4

Вы можете выполнять произвольные операторы SQL с помощью wpdb :: query () , включая операторы определения данных, например

function
create_index ()
{
    global $wpdb ;

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

    $wpdb->query ($sql) ;

    return ;
}

Примечание. Поскольку $wpdb->query()может выполняться произвольный SQL, если передаваемый ему оператор содержит ЛЮБОЙ пользовательский ввод, вы должны использовать wpdb :: prepare () для защиты от атак SQL-инъекций.

Но возникает вопрос: как вы создавали таблицы для плагинов? «Вручную» или программно? Если программно, вы не использовали $wpdb->query()? Если вы сделали это «вручную», то вам действительно нужно создавать таблицы (и их индексы) после активации плагина.

Смотрите отличный ответ на этот другой вопрос WPSE, чтобы узнать, как подключить активацию плагина (и / или деактивацию и удаление) для создания таких вещей, как создание личных таблиц.

Пол "Воробей Ястреб" Бирон
источник
Спасибо за ответ на этот вопрос, хотя ему 5 месяцев. Я закончил тем, что делал это, но не был уверен, был ли это "правильный путь". Будет большая помощь в следующий раз, когда я попытаюсь это сделать.
Молоко
@ Молоко. Мое удовольствие. Я подумал, что вы либо уже решили свою проблему, либо уже отказались :-) Я ответил на нее (даже через 5 мес после того, как вы спросили), чтобы помочь другим, у которых возникла такая же проблема, найти WPSE и найти ваш вопрос.
Пол «Воробей Ястреб» Бирон
3

Используя dbDelta, поверх PRIMARY KEY, вы можете включить слово KEY, чтобы создать индекс для других столбцов:

Вы должны использовать ключевое слово KEY, а не его синоним INDEX, и вы должны включить хотя бы один 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 - Создание таблиц с помощью плагинов

froger.me
источник