phpBB – Nie istnieją żadne posty dla tego tematu
Bywa, że forach opartych na phpBB v2 (i tylko w wersji 2) występuje błąd polegający na tym, że na ostatniej stronie wątku otrzymujemy komunikat:
„Nie istnieją żadne posty dla tego tematu”
Właśnie taka przyjemność mnie trafiła.
Skąd się bierze taki błąd i co z nim można zrobić?
Błąd wynika z braku transakcyjności phpBB. Przy kasowaniu postu, na skutek przerwania operacji zniknął rekord z treścią z tablicy phpbb_post_texts ale nie zniknął z tablicy phpbb_posts. Baza stała się niespójna.
Rozwiązania proponowane na różnych forach przyprawiły mnie o dreszcze. Kilkudziesięcioliniowe fragmenty w php rozwiązywały niezrozumiały problem w niezrozumiały mi sposób. Po chwili analizy kodu machnąłem takie drobne zapytanie w sql. Mam wrażenie, że jest dużo bardziej zrozumiałe:
delete p.* FROM phpbb_posts p
LEFT JOIN phpbb_posts_text t ON p.post_id = t.post_id
WHERE t.post_id IS NULL;
Tłumacząc sql na ludzki:
Usuwamy takie wiersze z tablicy phpbb_posts, które po złączeniu zewnętrznym phpbb_posts z tablicą phpbb_posts_text nie znalazły swoich odpowiedników.
Na małym PC, skrypt oczyścił mi forum zawierające ponad 50 000 postów w niecałą sekundę.
5 odpowiedzi na „phpBB – Nie istnieją żadne posty dla tego tematu”