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 04-15-2007, 11:06 AM
harmor19 harmor19 is offline
 
Join Date: Apr 2005
Posts: 1,324
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default query with left join and grouping.

I have two tables, "custom_droplinks_cat" and "custom_droplinks".
Below is the tables' layout. I hope it is easy to understand.

Code:
----------------------------------------
| Table: custom_droplinks_cat 
----------------------------------------
| catid: 1
| title: Test Category 1
----------------------------------------
| catid: 2
| title: Test Category 2
----------------------------------------

----------------------------------------
| Table: custom_droplinks 
----------------------------------------
| linkid: 1
| title: Test Link 1
| catid: 1
----------------------------------------
| linkid: 2
| title: Test Link 2
| catid: 1
----------------------------------------
| linkid: 3
| title: Test Link 4
| catid: 2
----------------------------------------
| linkid: 4
| title: Test Link 4
| catid: 2
----------------------------------------


I don't want to ask more than I need to so I'll just ask "How do I make "Test Category" bold then place "Test Link" immediately after followed by a break (br />)?

PHP Code:
$getdroplinks_cat $db->query_read("SELECT
    droplink_cat.catid as dlc_catid,
        droplink_cat.title as dlc_title,
    droplink.catid as dl_catid,
    droplink.title as dl_title,
    
    FROM " 
TABLE_PREFIX "custom_droplinks_cat AS droplink_cat
    LEFT JOIN " 
TABLE_PREFIX "custom_droplinks AS droplink ON (droplink_cat.catid=droplink.catid)
    WHERE droplink_cat.catid = droplink.catid "
);
    while(
$dlink $db->fetch_array($getdroplinks_cat))
{
  echo 
"<b>".$dlink['dlc_title']."</b><br />
  "
.$dlink['dl_title']."<br /><br />";



I want the result to be
Code:
Test Category 1
Test Link 1
Test Link 2

Test Category 2
Test Link 3
Test Link 4
Reply With Quote
  #2  
Old 04-15-2007, 12:24 PM
Marco van Herwaarden Marco van Herwaarden is offline
 
Join Date: Jul 2004
Posts: 25,415
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

A basic example on how you could do this:
PHP Code:
$last_cat null;
while (
my loop conditions)
{
 if (
$last_cat != $current_cat)
 {
  
$last_cat $current_cat;
  echo 
"my nice bold line with the category";
 }
 echo 
"and my link";

Reply With Quote
  #3  
Old 04-15-2007, 12:33 PM
harmor19 harmor19 is offline
 
Join Date: Apr 2005
Posts: 1,324
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thanks for answering my question. I'm going to try it out soon.
Reply With Quote
  #4  
Old 04-17-2007, 01:38 PM
harmor19 harmor19 is offline
 
Join Date: Apr 2005
Posts: 1,324
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I thought I could apply the solution Marco gave me to the real query but I can't get it to work.

Here is the actual code
PHP Code:
    <template name="custom_droplinks" templatetype="template" date="1176624912" username="harmor" version="1.6.0"><![CDATA[<div class="vbmenu_popup" id="adv$dlink[dlc_catid]menu_menu" style="display:none">
        <
table cellpadding="4" cellspacing="1" border="0">        
        <
tr><td class="thead">$dlink[title]</td></tr>    
$custom_droplinks_bit
        
</table>
    </
div>]]></template>
        <
template name="custom_droplinks_cat" templatetype="template" date="1176624827" username="harmor" version="1.6.0"><![CDATA[<td id="adv$dlink[dlc_catid]menu" class="vbmenu_control">
    <
a href="#">$dlink[title]</a>
    <
script type="text/javascript">
        
vbmenu_register("adv$dlink[dlc_catid]menu");
    </
script>
</
td>
]]></
template>


        <
plugin active="1" executionorder="5">
            <
title>Custom Links</title>
            <
hookname>global_start</hookname>
            <
phpcode><![CDATA[
    
    
$last_cat '0';
    
$getdroplinks_cat $db->query_read("SELECT
    droplink_cat.catid as dlc_catid,
    droplink.catid as dl_catid,
    droplink.new_window,
    droplink.link_perms,
    droplink.name,
    droplink.image,
    droplink.url,
    droplink.alt,
    droplink.number,
    droplink_cat.title,
    droplink_cat.permissions,
    droplink_cat.display
    
    FROM " 
TABLE_PREFIX "custom_droplinks_cat AS droplink_cat
    LEFT JOIN " 
TABLE_PREFIX "custom_droplinks AS droplink ON (droplink_cat.catid=droplink.catid)
    ORDER BY dl_catid ASC "
);
    while(
$dlink $db->fetch_array($getdroplinks_cat))                        
    {
            
        eval(
'$custom_droplinks_cat .= "' fetch_template('custom_droplinks_cat') . '";');                                
        
        
$custom_droplinks_bit .= "<tr><td class='vbmenu_option'>$img<a href='".$dlink['url']."' target='$new' title='".$dlink['alt']."'>".$dlink['name']."</a></td></tr>";
            
        eval(
'$custom_droplinks = "' fetch_template('custom_droplinks') . '";');
        
    } 
Reply With Quote
  #5  
Old 04-17-2007, 03:52 PM
Marco van Herwaarden Marco van Herwaarden is offline
 
Join Date: Jul 2004
Posts: 25,415
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Please post the actually code, i don't want to go decode your XML.
Also telling what is not working might also help.
Reply With Quote
  #6  
Old 04-20-2007, 05:12 PM
harmor19 harmor19 is offline
 
Join Date: Apr 2005
Posts: 1,324
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

In the screenshot "Test1" is supposed to have "vBulletin" and "Test2" is supposed to have "Xen Web".

I'm not sure if this code snippet will suffice but I don't want to post all the code as it may be overwhelming.
PHP Code:
if($last_cat != $dlink['dlc_catid'])
{
    
$last_cat $dlink['dlc_catid'];
    eval(
'$custom_droplinks_cat .= "' fetch_template('custom_droplinks_cat') . '";');                                
}
        

$custom_droplinks_bit .= "<tr><td class='vbmenu_option'>$img<a href='".$dlink['url']."' target='$new' title='".$dlink['alt']."'>".$dlink['name']."</a></td></tr>"

Edit: I think I may have to do two separate queries.
Attached Images
File Type: png image.png (8.3 KB, 0 views)
File Type: jpg droplinks.jpg (12.2 KB, 0 views)
File Type: png droplinks_categories.png (3.8 KB, 0 views)
Reply With Quote
  #7  
Old 04-20-2007, 05:43 PM
harmor19 harmor19 is offline
 
Join Date: Apr 2005
Posts: 1,324
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I figured out the mistake and I fixed it.
Thanks Marco for atleast making an effort to help.

I ran into another problem but I got it situated.
I'm posting the working code here for two reasons. One is if I lose the code and the other is for other people to look at.
I wanted to use "left join" but the query got to be too complicated for me.

PHP Code:
$last_cat '0';
    
$getdroplinks_cat $db->query_read("SELECT *
    FROM " 
TABLE_PREFIX "custom_droplinks_cat ORDER BY catid");
    while(
$dlink $db->fetch_array($getdroplinks_cat))                        
    {
    
        
$dlink['permissions'] = explode(","$dlink['permissions']);
    
        if(
$last_cat != $dlink['catid'])
        {
            if(
in_array($vbulletin->userinfo['usergroupid'], $dlink['permissions']) )
            {
                eval(
'$custom_droplinks_cat .= "' fetch_template('custom_droplinks_cat') . '";');    
            }
                                            
        }
        
        
$custom_droplinks_bit .= "<div class='vbmenu_popup' id='adv$dlink[catid]menu_menu' style='display:none'>
                <table cellpadding='4' cellspacing='1' border='0'>        
                <tr><td class='thead'>"
.$dlink['title']."</td></tr>";
        
        
$getdroplink_bits $db->query_read("SELECT * FROM " TABLE_PREFIX "custom_droplinks WHERE catid = '$dlink[catid]' ");
        while(
$droplink_bits $db->fetch_array($getdroplink_bits))
        {
    
            if(
$droplink_bits['new_window'] == 1)
               {
                
$new "_blank";
            }
            else
            {
                
$new "";
            }
            
            if(!empty(
$droplink_bits['image']))
            {
                
$img "<img src='".$droplink_bits['image']."' width='16' height='16' />";
            }
            else
            {
                
$img "";
            }
            
           
            
            
$droplink_bits['link_perms'] = explode(","$droplink_bits['link_perms']);    
        
            
            if(
in_array($vbulletin->userinfo['usergroupid'], $droplink_bits['link_perms']) )
            {
                
$custom_droplinks_bit .=
                
"<tr><td class='vbmenu_option'>$img<a href='".$droplink_bits['url']."' target='$new' title='".$droplink_bits['alt']."'>".$droplink_bits['name']."</a></td></tr>";
            }    
            
            
        }
        
        
$custom_droplinks_bit .= "</table></div>";
        
        eval(
'$custom_droplinks = "' fetch_template('custom_droplinks') . '";');
        
        
$last_cat $dlink['catid'];

    } 
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:57 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.04489 seconds
  • Memory Usage 2,310KB
  • Queries Executed 12 (?)
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
  • (2)bbcode_code
  • (5)bbcode_php
  • (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
  • (3)postbit_attachment
  • (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
  • postbit_attachment
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete