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 07-09-2007, 03:59 PM
Antivirus's Avatar
Antivirus Antivirus is offline
 
Join Date: Sep 2004
Location: Black Lagoon
Posts: 1,090
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default Ordering grouped results within GROUP BY clause

I'm having a really tough time with the following query:

[SQL]
SELECT scst_task.taskid, scst_task.enddate, scst_task.recurring, scst_fb.fbid, COUNT(scst_fbposts.fbid) AS fbqty, scst_fb.userid,
scst_fbposts.statusid, scst_status.status, scst_status.alertmember, scst_status.css, scst_status.icon
FROM scst_task
LEFT JOIN usergroup ON usergroup.scstugteamid = scst_task.teamid
LEFT JOIN scst_fb ON scst_fb.taskid = scst_task.taskid AND scst_fb.userid = 1
LEFT JOIN scst_fbposts ON scst_fbposts.fbid = scst_fb.fbid
LEFT JOIN scst_status ON scst_status.statusid = scst_fbposts.statusid
WHERE FIND_IN_SET(usergroup.usergroupid, '13,16') > 0
AND scst_task.startdate <= 1183991294 AND scst_task.enddate > 1183991294
GROUP BY scst_task.taskid
HAVING fbqty < scst_task.recurring
ORDER BY scst_team.teamtitle ASC, scst_task.enddate ASC
[/SQL]

The problem i am having is with regards to the order of the scst_fbposts records grouped by the COUNT clause. Currently it's ordering them by whatever order they are stored within the database, however I need them ordered by scst_fbposts.statusid ASC.

I can easily get that accomplished by adding scst_fbposts.statusid to the GROUP BY clause, however problem is that doing so breaks the COUNT clause and records are no longer grouped.

Can someone please help me?
Reply With Quote
  #2  
Old 07-09-2007, 06:05 PM
Farcaster Farcaster is offline
 
Join Date: Dec 2005
Posts: 386
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I'm not sure exactly what your goal is with this query and I don't have the product you must have (is this from Project Tools?). I'm actually surprised that MySQL lets this work. I never realized that it didn't use the standard SQL limitations for GROUP BY. According to the documentation available, the extension of the GROUP BY clause that lets you have non-aggregate columns in your query applies to the ORDER BY clause as well, so from what I am reading, it should work.

However, you might try ORDER BY MAX(scst_fbposts.statusid) or by the column number, like this: ORDER BY 7
Reply With Quote
  #3  
Old 07-09-2007, 07:34 PM
Antivirus's Avatar
Antivirus Antivirus is offline
 
Join Date: Sep 2004
Location: Black Lagoon
Posts: 1,090
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thanks for response - it's not fro project tools, but from a custom add-on which I am working on.

Adding MIN(scst_fbposts.statusid) to the SELECT statement gets the lowest result for that column, but the other columns from that table are still out of order, hence why I am trying to order the scst_fbposts records before the grouping.

The two results which are being grouped (without the group by and count) are as follows:

=========================================
| taskid | enddate | recurring | fbqty | fbid | statusid |
=========================================
| 9 | 1185940800 | 3 | 1 | 11 | 8 |
| 9 | 1185940800 | 3 | 1 | 12 | 4 |
=========================================

And when grouped, they are showing like this:
=========================================
| taskid | enddate | recurring | fbqty | fbid | statusid |
=========================================
| 9 | 1185940800 | 3 | 2 | 11 | 8 |
=========================================

However, I want these grouped rows to be sorted first by statusid ASC because i need the end result to be this:
=========================================
| taskid | enddate | recurring | fbqty | fbid | statusid |
=========================================
| 9 | 1185940800 | 3 | 2 | 12 | 4 |
=========================================

.
Reply With Quote
  #4  
Old 07-09-2007, 08:40 PM
Farcaster Farcaster is offline
 
Join Date: Dec 2005
Posts: 386
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Okay, try this, replace:

[SQL]LEFT JOIN scst_fb ON scst_fb.taskid = scst_task.taskid AND scst_fb.userid = 1[/SQL]

With:

[SQL]LEFT JOIN (SELECT * FROM scst_fb ORDER BY statusid ASC) scst_fb ON scst_fb.taskid = scst_task.taskid AND scst_fb.userid = 1[/SQL]


Note, that will only work in MySQL 4.1 and above.
Reply With Quote
  #5  
Old 07-09-2007, 08:55 PM
Antivirus's Avatar
Antivirus Antivirus is offline
 
Join Date: Sep 2004
Location: Black Lagoon
Posts: 1,090
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I posted a much simpler explaination of my issue in this thread...
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 01:06 PM.


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.03616 seconds
  • Memory Usage 2,198KB
  • Queries Executed 13 (?)
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)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (5)post_thanks_box
  • (5)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (5)post_thanks_postbit_info
  • (5)postbit
  • (5)postbit_onlinestatus
  • (5)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
  • 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