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 03-22-2007, 12:54 AM
makaiguy's Avatar
makaiguy makaiguy is offline
 
Join Date: May 2004
Location: Aiken, SC, USA
Posts: 150
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Query syntax help needed

I'm trying to create a list of my Registered Users (primary usergroup #2)that are NOT also in secondary group #12. I've tried this
Code:
SELECT email, username FROM user WHERE (usergroupid=2 AND NOT(membergroupids=12));
.. and a few variations thereof, but I haven't hit on the magic combination that excludes the members of group #12.

I don't know if it is germane, but users CAN be in more than one secondary group on my board, so the membergroupids entry for a user could be a series of group numbers strung together with commas, like "8,9,12,13".

I'd greatly appreciate it if somebody could help with the correct query syntax.
Reply With Quote
  #2  
Old 03-22-2007, 01:03 AM
briansol's Avatar
briansol briansol is offline
 
Join Date: Apr 2006
Location: CT
Posts: 254
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

SELECT email, username
FROM user
WHERE usergroupid =2
AND membergroupids !=12

or perhaps if you have multiple groups:

SELECT u.email, u.username FROM user u
WHERE u.usergroupid=2
and u.userid != (select userid v from user v where v.membergroupids LIKE '%12%' and u.userid = v.userid)
Reply With Quote
  #3  
Old 03-22-2007, 01:22 AM
makaiguy's Avatar
makaiguy makaiguy is offline
 
Join Date: May 2004
Location: Aiken, SC, USA
Posts: 150
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by briansol View Post
SELECT email, username
FROM user
WHERE usergroupid =2
AND membergroupids !=12
Thanks, this is close. It eliminates those that are ONLY in secondary group 12 (i.e. those where membergroupids = "12" but does not eliminate those that are in both groups 12 and 13 (i.e. membergroupids = "12,13") and maybe some other combinations that I haven't checked.

We need, not an inequality but a "not found in" check.

[Edit] I see you edited yours while I was writing the above reply. I'll try your additional suggestion and get back...

Quote:
Originally Posted by briansol View Post
or perhaps if you have multiple groups:


SELECT u.email, u.username FROM user u
WHERE u.usergroupid=2
and u.userid != (select userid v from user v where v.membergroupids LIKE '%12%' and u.userid = v.userid)
Sadly, no go. Doesn't return anybody.

But combining the two approaches, it looks, on first blush, like this does work:

SELECT email, username
FROM user
WHERE usergroupid =2
AND membergroupids NOT LIKE '%12%'

I'll have to spot check a few users of known multiple group memberships, but so far I think that'll do it. Thanks for your help.
Reply With Quote
  #4  
Old 03-22-2007, 08:33 AM
Marco van Herwaarden Marco van Herwaarden is offline
 
Join Date: Jul 2004
Posts: 25,415
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

..AND NOT FIND_IN_SET(12, membergroupids)...
Reply With Quote
  #5  
Old 03-23-2007, 11:08 PM
makaiguy's Avatar
makaiguy makaiguy is offline
 
Join Date: May 2004
Location: Aiken, SC, USA
Posts: 150
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Marco van Herwaarden View Post
..AND NOT FIND_IN_SET(12, membergroupids)...
Have already created the list using NOT LIKE ...
.. but will add this to my bag o' tricks for next time.

Thanks, Marco!
Reply With Quote
  #6  
Old 03-24-2007, 07:33 AM
Marco van Herwaarden Marco van Herwaarden is offline
 
Join Date: Jul 2004
Posts: 25,415
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

You can not do the trick with a (NOT) LIKE.

Example:

Member A, Membergroupids: '1,4,123'
Member B, Membergroupids: '12,31'

Looking for '%4%' would give you the correct result, but using '%12%' would also match the '123', and that is not what you want.
Reply With Quote
  #7  
Old 03-25-2007, 04:03 AM
makaiguy's Avatar
makaiguy makaiguy is offline
 
Join Date: May 2004
Location: Aiken, SC, USA
Posts: 150
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Quote:
Originally Posted by Marco van Herwaarden View Post
You can not do the trick with a (NOT) LIKE.

Example:

Member A, Membergroupids: '1,4,123'
Member B, Membergroupids: '12,31'

Looking for '%4%' would give you the correct result, but using '%12%' would also match the '123', and that is not what you want.
Thanks again, Marco. As it turns out in my particular scenario checking for '%12%' worked okay because we don't have any groups with 3-digit numbers. But it is definitely something to keep in mind when checking for single-digit group numbers.
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 02:33 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.24646 seconds
  • Memory Usage 2,222KB
  • 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_code
  • (4)bbcode_quote
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (7)post_thanks_box
  • (7)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (7)post_thanks_postbit_info
  • (7)postbit
  • (7)postbit_onlinestatus
  • (7)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