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 06-29-2012, 11:26 AM
fordforumsonlin fordforumsonlin is offline
 
Join Date: Jun 2012
Posts: 3
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default SQL Query to Update Attach Column in Post & Thread Tables

Hello All!

I was wondering if anyone with an understanding of SQL might be able to help me with a little problem I've got with my forum?

One of my users had 'accidentally' deleted all of her attachments on our forum, but didn't notify us until a week or so later. I've tried to partially update my database with my limited knowledge of MySql and have done so but now facing a small issue.

The attachments are showing in her profile, and when I log in as an admin and edit the post where the attachments are meant to be showing they are being displayed but they are not showing on the thread after I refresh the page. I contacted the vbulletin support who kindly told me what the issue was...

Quote:
Hi Paul

There are two sets of data that need to be updated in your database for the attachments to show:

- attach column in the post table
- attach column in the thread table

These values should be the total of the number of attachments for that post/thread. It should be possible to write a query that calculates the number for each post and updates the values there then a second query to add the values from the updated post table to update the thread one but you would need to post in the forums for further help with this as this is outside the realms of ticket support I'm afraid.

Best regards,
I have attached a couple of screenshots to help further identify the problem.

Does anyone know how to write a query that could help solve my issue? Any help would be gratefully received,

Regards,
Paul
Reply With Quote
  #2  
Old 06-29-2012, 02:49 PM
Lynne's Avatar
Lynne Lynne is offline
 
Join Date: Sep 2004
Location: California/Idaho
Posts: 41,180
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Since this would reply on the contenttypeid for your Post, you will need to list what it is from your contenttype table. Normally, it would be 1, but sometimes users reinstall and get those numbers messed up.

Have you tried to write these queries yourself - at least taken a stab at it?
Reply With Quote
Благодарность от:
fordforumsonlin
  #3  
Old 06-29-2012, 03:37 PM
fordforumsonlin fordforumsonlin is offline
 
Join Date: Jun 2012
Posts: 3
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Hello Lynne,

Thanks for getting back to me, I wouldn't know where to start in order to do this, I'm very new to MySQL and have only recently learned the difference between flushing a table and dropping a table!!

Do you think it would be complicated for someone to do it? I would be happy to pay someone if it is a lot of work, perhaps you know of someone?

Regards,
Paul
Reply With Quote
  #4  
Old 06-29-2012, 04:30 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I think Lynne's thinking of vb4 when she mentioned contenttype - in vb3 there is no contenttype in the attachment table, there's just a postid.

I'm not a mysql expert or anything, but I think I came up with a way to do it using a temp table. There may be some way to do it in one query without a temp table, but I don't know. Anyway, here's what I have (in a series of queries):

Code:
CREATE TABLE temp_attach_count (
		id INT UNSIGNED NOT NULL DEFAULT '0',
		attach INT UNSIGNED NOT NULL DEFAULT '0'
	)
Code:
INSERT INTO temp_attach_count
SELECT postid as id, count(*) as count FROM attachment
WHERE postid > 0
GROUP BY postid
Code:
UPDATE temp_attach_count
LEFT JOIN post ON (post.postid = temp_attach_count.id)
SET post.attach = temp_attach_count.count
at this point the post counts should be fixed. If there was a problem, you can always do a "DROP TABLE temp_attach_count" and start again from the beginning.


Code:
TRUNCATE temp_attach_count
The TRUNCATE above is important - at this point you might want to check to make sure the temp_attach_count table has no rows.


Code:
INSERT INTO temp_attach_count
SELECT threadid as id, SUM(attach) as count FROM post
WHERE visible = 1
GROUP BY threadid
Code:
UPDATE temp_attach_count
LEFT JOIN thread ON (thread.threadid = temp_attach_count.id)
SET thread.attach = temp_attach_count.count
Code:
DROP TABLE temp_attach_count

This fixes the count for every post and thread that has an attachment in the attachment table. I thought about limiting it to attachments where the userid matched the user in question, but then I wasn't sure if it's possible for a post to include another member's attachment or not.

Edit: and I forgot to mention, if you have a table prefix set in your config.php then this code will need to be modified to add that (and if you don't understand what that is, don't worry because if you do have a prefix the second query will cause an error, no harm done).
Reply With Quote
2 благодарности(ей) от:
fordforumsonlin, Lynne
  #5  
Old 07-02-2012, 02:03 PM
fordforumsonlin fordforumsonlin is offline
 
Join Date: Jun 2012
Posts: 3
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Kh99 you are amazing!

I followed your steps exactly and you've completely fixed my website! Your code was perfect, but for those facing a similar issue, the below code should be changed:
SET thread.attach = temp_attach_count.count

SET thread.attach = temp_attach_count.attach
Thank you soo very much! also big thanks to Lynne.

Regards,
Paul
Reply With Quote
  #6  
Old 07-02-2012, 03:48 PM
kh99 kh99 is offline
 
Join Date: Aug 2009
Location: Maine
Posts: 13,185
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by fordforumsonlin View Post
I followed your steps exactly and you've completely fixed my website! Your code was perfect, but for those facing a similar issue, the below code should be changed:
SET thread.attach = temp_attach_count.count

SET thread.attach = temp_attach_count.attach
Oops - yeah, I changed the name of that field but missed one. Thanks.
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 06:15 PM.


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.03905 seconds
  • Memory Usage 2,250KB
  • Queries Executed 14 (?)
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
  • (7)bbcode_code
  • (2)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (6)post_thanks_box
  • (3)post_thanks_box_bit
  • (6)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (2)post_thanks_postbit
  • (6)post_thanks_postbit_info
  • (6)postbit
  • (3)postbit_attachment
  • (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_postinfo_query
  • fetch_postinfo
  • 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
  • fetch_musername
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_attachment
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • post_thanks_function_fetch_thanks_bit_start
  • post_thanks_function_show_thanks_date_start
  • post_thanks_function_show_thanks_date_end
  • post_thanks_function_fetch_thanks_bit_end
  • post_thanks_function_fetch_post_thanks_template_start
  • post_thanks_function_fetch_post_thanks_template_end
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete