Як додати індекс до таблиці баз даних плагінів


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, якщо ви передаваєте йому заяву, містить будь-які введення користувача, то для захисту від атак SQL Injection слід використовувати wpdb :::

Але це викликає питання: як ви створили свої плагін-таблиці? "Вручну" чи програмно? Якщо програмно ви не використовували $wpdb->query()? Якщо ви зробили це "вручну", тоді вам слід створити таблиці (та їх індекси) при активації плагіна.

Дивіться відмінну відповідь на це інше питання WPSE про те, як підключити активацію плагінів (та / або дезактивацію та видалення), щоб робити такі дії, як створення приватних таблиць.


Дякуємо, що відповіли на це запитання, хоча йому вже 5 місяців. Я закінчила це робити, але не була впевнена, чи це був "правильний шлях". Буде великою підмогою наступного разу, коли я спробую це зробити.
Молоко

@Milk Моє задоволення. Я подумав, що ви вже вирішили свою проблему або відмовились :-) Я відповів на це (навіть через 5mos після того, як ви попросили), щоб допомогти іншим, хто має таку ж проблему, і пошукати WPSE і натрапити на ваше питання.
Пол 'Горобець Яструб' Бірон

3

Використовуючи dbDelta, поверх ПЕРВИННОГО КЛЮЧА, ви можете включити слово 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 - Створення таблиць із плагінами

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.