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 12-08-2008, 03:13 AM
h2ojunkie h2ojunkie is offline
 
Join Date: Sep 2004
Posts: 57
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default limit left join to 1 record

Maybe I'm going about this all wrong, but basically I'm trying to add to showthread_query to check if the user has any public albums so I can check for the albums using a conditional in the postbit.

I was trying to just LEFT JOIN, but if the user has more than one public album, I end up with too many results.

I need to limit the result to just the 1st public album for that user or else I end up with posts duplicating on showthread

This is far as I can get

For: showthread_query $hook_query_fields
Code:
,album.userid AS hasalbums
And for: showthread_query $hook_query_joins
Code:
LEFT JOIN " . TABLE_PREFIX . "album AS album ON(album.userid = post.userid AND album.state = 'public')
How would I limit the join to one result?

Or is there a better way to just fine out if the user has any public albums. I don't really need the albumid..i just need to establish if they have any public albums at all.
Reply With Quote
  #2  
Old 12-08-2008, 03:45 AM
Adrian Schneider's Avatar
Adrian Schneider Adrian Schneider is offline
 
Join Date: Jul 2004
Posts: 2,528
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Use an aggregate function like count() instead of album.userid and then group by your primary recordid.
Reply With Quote
  #3  
Old 12-08-2008, 09:19 PM
h2ojunkie h2ojunkie is offline
 
Join Date: Sep 2004
Posts: 57
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Ok, so I played around with the Group By and found something that does work as intended.

I thought I'd post it up here and see if anyone can think of a more efficient or cleaner way to do it.

Basically, I need a conditional to eval to true for use in the postbit template if the user has any public albums.

The conditional I'm using:
Code:
if (!empty($post['hasalbum']))
{

$template_hook['postbit_userinfo_right'] .= '<div><a href="album.php?' . $vbulletin->session->vars['sessionurl'] . 'u=' . $post[userid] . '" rel="nofollow">' . $vbphrase['members_picture_albums'] . '</a></div>';

}

And the query I got to work:

Hook: showthread_query

Code:
$hook_query_fields .= ",album.userid as hasalbum";

$hook_query_joins .= "LEFT JOIN (SELECT state, userid, MAX(albumid) AS hasalbum FROM " . TABLE_PREFIX . "album GROUP BY userid) album ON(user.userid = album.userid AND album.state = 'public')";

As I said, I got this working as intended. But I'm not sure if this is the best/most efficient way to do things since I had to use MAX(albumid) to make sure it only returned on result no matter how many public albums they have.

Anyone have any input?
Reply With Quote
  #4  
Old 12-17-2008, 08:40 PM
firstimecaller's Avatar
firstimecaller firstimecaller is offline
 
Join Date: Feb 2004
Posts: 48
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

this is very useful and should, of course, be standard in vB to help support social and album use. If I had some time I'd play around with the query to help.
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:30 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.03689 seconds
  • Memory Usage 2,187KB
  • 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
  • (4)bbcode_code
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (4)post_thanks_box
  • (4)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (4)post_thanks_postbit_info
  • (4)postbit
  • (4)postbit_onlinestatus
  • (4)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