Jak dodać indeks do tabeli bazy danych wtyczek

10

Utworzyłem dodatkowe tabele dla wtyczki, którą opracowuję i muszę dodać indeksy do tych tabel.

Jak to zrobić w WordPress?

dbDelta()Wydaje się, że używanie nie działa i nie widzę żadnych błędów w logach.

mleko
źródło

Odpowiedzi:

4

Za pomocą wpdb :: query () można wykonywać dowolne instrukcje SQL , w tym instrukcje definicji danych, np

function
create_index ()
{
    global $wpdb ;

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

    $wpdb->query ($sql) ;

    return ;
}

Uwaga: Ponieważ $wpdb->query()można wykonać dowolny SQL, jeśli przekazana do niego instrukcja zawiera DOWOLNE dane wejściowe użytkownika, należy użyć wpdb :: prepar (), aby zabezpieczyć się przed atakami SQL Injection.

Rodzi to pytanie: w jaki sposób stworzyłeś tabele specyficzne dla wtyczek? „Ręcznie” czy programowo? Jeśli programowo, nie używałeś $wpdb->query()? Jeśli zrobiłeś to „ręcznie”, naprawdę powinieneś utworzyć tabele (i ich indeksy) po aktywacji wtyczki.

Zobacz doskonałą odpowiedź na to drugie pytanie WPSE, aby dowiedzieć się, jak podłączyć aktywację wtyczki (i / lub dezaktywację i odinstalowanie) w celu tworzenia prywatnych tabel.

Paul „Sparrow Hawk” Biron
źródło
Dziękujemy za odpowiedź na to pytanie, mimo że ma ono 5 miesięcy. Skończyło się na tym, ale nie byłem pewien, czy to „właściwa droga”. Przyda mi się następnym razem, gdy spróbuję to zrobić.
Milk
@Milk Moja przyjemność. Pomyślałem, że albo już rozwiązałeś swój problem, albo zrezygnowałeś :-) Odpowiedziałem na nie (nawet 5 milionów po tym, jak poprosiłeś), aby pomóc innym, którzy mają ten sam problem, wyszukać WPSE i znaleźć twoje pytanie.
Paul „Sparrow Hawk” Biron
3

Korzystając z dbDelta, na kluczu podstawowym, możesz dołączyć słowo KLUCZ, aby utworzyć indeks dla innych kolumn:

Musisz użyć słowa kluczowego KLUCZ zamiast jego synonimu INDEKS i musisz dołączyć co najmniej jeden KLUCZ.

Przykład ze schema.php w rdzeniu:

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;

Źródło: codex - Tworzenie tabel z wtyczkami

froger.me
źródło