Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 Programming Discussions
FAQ Community Calendar Today's Posts Search

Reply
 
Thread Tools Display Modes
  #1  
Old 11-09-2002, 08:24 PM
wot-Mike wot-Mike is offline
 
Join Date: Oct 2001
Location: Netherlands
Posts: 106
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default 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...
Reply With Quote
  #2  
Old 11-10-2002, 12:42 AM
JulianD's Avatar
JulianD JulianD is offline
 
Join Date: Jan 2002
Posts: 455
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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.
Reply With Quote
  #3  
Old 11-10-2002, 01:49 AM
filburt1 filburt1 is offline
 
Join Date: Feb 2002
Location: Maryland, US
Posts: 6,144
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

That won't get rid of posts though.

Check out Scott's script at http://www.vbulletin.com/forum/showt...light=orphaned .
Reply With Quote
  #4  
Old 11-10-2002, 11:22 PM
wot-Mike wot-Mike is offline
 
Join Date: Oct 2001
Location: Netherlands
Posts: 106
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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

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
Reply With Quote
  #5  
Old 12-04-2002, 08:30 PM
sparky2 sparky2 is offline
 
Join Date: Jul 2002
Posts: 31
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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.
Reply With Quote
  #6  
Old 12-10-2002, 08:08 AM
Scott MacVicar Scott MacVicar is offline
 
Join Date: Oct 2001
Location: Glasgow, Scotland
Posts: 1,199
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

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.
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 10:22 AM.


Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2024, vBulletin Solutions Inc.
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.05200 seconds
  • Memory Usage 2,238KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)ad_showthread_beforeqr
  • (1)ad_showthread_firstpost
  • (1)ad_showthread_firstpost_sig
  • (1)ad_showthread_firstpost_start
  • (1)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (6)post_thanks_box
  • (6)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (6)post_thanks_postbit_info
  • (6)postbit
  • (6)postbit_onlinestatus
  • (6)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open
  • (1)tagbit_wrapper 

Phrase Groups Available:
  • global
  • inlinemod
  • postbit
  • posting
  • reputationlevel
  • showthread
Included Files:
  • ./showthread.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/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.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
  • showthread_start
  • showthread_getinfo
  • forumjump
  • showthread_post_start
  • showthread_query_postids
  • showthread_query
  • bbcode_fetch_tags
  • bbcode_create
  • showthread_postbit_create
  • postbit_factory
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete