vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB3 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=15)
-   -   find and delete orphans (https://vborg.vbsupport.ru/showthread.php?t=45553)

wot-Mike 11-09-2002 08:24 PM

find and delete orphans
 
In short, some forums were deleted through the Admin Control Panel, but the stuff timed out. The result is that the forums are indeed gone, but the threads and posts they contained are still inside the database.

How can I get rid of those "forumless" orphans?
Yes, I've deleted a lot of them manually, but geez...

JulianD 11-10-2002 12:42 AM

Uhmmm. Try to run from your Admin CP:

Update Counters > Remove dupe threads.

If that doesn't work, you will have to run a query like this:

[sql]DELETE FROM thread WHERE forumid='XX'[/sql]

And replace XX with the forumid of the deleted forum.

filburt1 11-10-2002 01:49 AM

That won't get rid of posts though.

Check out Scott's script at http://www.vbulletin.com/forum/showt...light=orphaned .

wot-Mike 11-10-2002 11:22 PM

I think I've got all the posts. Cleaned up 11,000 of them via a SSH session.

And DELETE FROM thread WHERE forumid='XX' worked. Geez, I can't imagine why I didn't think of this :rolleyes:

Anyway, it was the site map hack thingie that woke me up. Suddenly I saw a whole lot of stuff I was busy cleaning out ages ago, and umm, got fed up with.


Thanks guys :)

sparky2 12-04-2002 08:30 PM

The following is PARTIALLY
code excerpted from v2.2.9 admin/misc.php
and
PARTIALLY code I added (remove EMPTY thread routine)
based on a suggestion offered by "Sadler"
which has apparently been ignored
by the vBulletin developers
----------------------------------v

PHP Code:

// ###################### Start remove EMPTY threads #######################
        // (EMPTY threads  are the buggered thread that show header/footer table cells w/ just a slice of whitespace b/t them)
if ($action=="removeemptythreads") {
  if (isset(
$perpage)==or $perpage=="") {
    
$perpage=50;
  }
  if (isset(
$startat)==or $startat=="") {
    
$startat=0;
  }
  
$finishat=$startat+$perpage;

  
$threads $DB_site->query("SELECT thread.threadid FROM thread AS thread LEFT JOIN post AS post USING(threadid) WHERE post.threadid IS NULL AND thread.open<>10 LIMIT $startat$perpage");
  while (
$thread $DB_site->fetch_array($threads)) {
    
$deleting++;
    
deletethread($thread['threadid']);
    echo 
"<p>Deleting thread $thread[threadid]</p>\n";
    
flush();
  }
  if(
$deleting) {
    
cpredirect("misc.php?s=$session[sessionhash]&action=removeemptythreads&startat=$finishat&perpage=$perpage");
  } else {
    echo 
'<p>No -=EMPTY=- threads were found</p>';
    
cpredirect("misc.php?s=$session[sessionhash]",1);
  }

}


// ###################### Start remove orphan threads #######################
if ($action=="removeorphanthreads") {
  if (isset(
$perpage)==or $perpage=="") {
    
$perpage=50;
  }
  if (isset(
$startat)==or $startat=="") {
    
$startat=0;
  }
  
$finishat=$startat+$perpage;
  
$threads $DB_site->query("SELECT thread.threadid FROM thread AS thread LEFT JOIN forum AS forum USING(forumid) WHERE forum.forumid IS NULL LIMIT $startat$perpage");
  while (
$thread $DB_site->fetch_array($threads)) {
    
$deleting++;
    
deletethread($thread['threadid']);
    echo 
"<p>Deleting thread $thread[threadid]</p>\n";
    
flush();
  }
  if(
$deleting) {
    
cpredirect("misc.php?s=$session[sessionhash]&action=removeorphanthreads&startat=$finishat&perpage=$perpage");
  } else {
    echo 
'<p>No orphan threads were found</p>';
    
cpredirect("misc.php?s=$session[sessionhash]",1);
  }

}
// ###################### Start remove orphan posts #######################
if ($action=="removeorphanposts") {
  if (isset(
$perpage)==or $perpage=="") {
    
$perpage=50;
  }
  if (isset(
$startat)==or $startat=="") {
    
$startat=0;
  }
  
$finishat=$startat+$perpage;

  
$posts $DB_site->query("SELECT post.threadid, post.postid FROM post AS post LEFT JOIN thread AS thread USING(threadid) WHERE thread.threadid IS NULL LIMIT $startat$perpage");
  while (
$post $DB_site->fetch_array($posts)) {
    
$deleting++;
    
deletepost($post['postid']);
    echo 
"<p>Deleting post $post[postid]</p>\n";
    
flush();
  }
  if(
$deleting) {
    
cpredirect("misc.php?s=$session[sessionhash]&action=removeorphanposts&startat=$finishat&perpage=$perpage");
  } else {
    echo 
'<p>No orphan posts were found</p>';
    
cpredirect("misc.php?s=$session[sessionhash]",1);
  } 

I'm still not convinced that the "remove orphaned posts" routine is quite right, though.
Heck of a lot faster to do it from the commandline
(DELETE instead of SELECT in the query and leave out the limit clause)
...and when I ran it from the v2.2.9 AdminCP (misc.php) several times consecutively, it "keep finding" (?) additional orphans with each pass. (Shouldn't be so ~~ it should have whacked all the orphans in one run.)



I'm open to additional thoughts on handling orphans.
A related problem is that a number of posts mysteriously
(continually) have post.visible='0' ~~ mysterious because users have no way of choosing this & it seems to happen at random.

Scott MacVicar 12-10-2002 08:08 AM

If you use Delete instead of the select it will not get the ids to remove the appropriate information.

It wont un-index the words from the search engine, or remove attachments. Leaving some more unclaimed stuff in your database.

I've not had a problem with the remove orpahn posts / threads on any of my test boards though this could be caused by hacks or any number of things.

If your still have problems try running the select query in phpmyadmin and see what it returns.


All times are GMT. The time now is 08:30 AM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01035 seconds
  • Memory Usage 1,755KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)bbcode_php_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (6)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete