Как очистить таблицу после пропущенных значений в другой таблице? - PullRequest
1 голос
/ 19 июня 2011

Мне не удалось перенести установку bbPress 1.0 на новый плагин bbPress 2.0 на моем WordPress, что сильно испортило мою таблицу wp_posts.

Я решил это, удалив все посты, в которых были значения topic и reply, в столбец post_type, и это было хорошо.

Но теперь я заметил, что wp_postmeta, похоже, подвержен влиянию большого количества записей, ссылающихся на сообщения, которые я удалил. Обе таблицы имеют столбец post_id.

Вопрос в том, какую команду SQL я использую для удаления значений в wp_postmeta, ссылающихся на строки, которых больше нет в wp_posts? Я знаю, что это какое-то соединение, которое мне следует использовать, но я не понимаю, как было бы искать что-то, чего нет, и удалять его.

PS: А что случилось с таблицами WordPress, не поддерживающими ссылочную целостность? Я уверен, что можно автоматически удалить что-то из wp_postmeta при удалении чего-либо, связанного с wp_posts. Ну да ладно ...

Ответы [ 2 ]

0 голосов
/ 19 июня 2011

Общий способ ручного удаления строк из таблицы a, которые не совпадают в таблице b:

DELETE FROM table_a WHERE some_id NOT IN (SELECT some_id FROM table_b);

это может быть не самый эффективный способ массового удаления (объединения могут, вероятно, сделать это быстрее), но я обычно предпочитаю подвыбор в таких случаях, это проще для понимания и, следовательно, снижает вероятность FUBAR (вы не не хочу случайно удалять строки в table_b и т. д.)

так что в вашем случае вы могли бы сделать что-то вроде этого:

SELECT * FROM wp_postmeta WHERE post_id NOT IN (SELECT post_id FROM wp_posts);

если вы уверены, что это строки, которые вы хотите удалить, замените SELECT * на DELETE:

DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT post_id FROM wp_posts);
0 голосов
/ 19 июня 2011

Я знаю, что это какое-то объединение, которое мне следует использовать, но я не понимаю, как было бы искать что-то, чего нет, и удалять его.

Да, вы хотите использовать внешние объединения.

PS: А что случилось с таблицами WordPress, не поддерживающими ссылочную целостность?

Многие новые приложения в настоящее время используют каркасы сущностей и явно не обеспечивают ссылочную целостность, а только отношения. Например, Atlassian JIRA не обеспечивает ссылочную целостность.

...