Go Back   vb.org Archive > vBulletin 3 Discussion > vB3 Programming Discussions

Reply
 
Thread Tools Display Modes
  #1  
Old 02-26-2003, 05:57 PM
fla5h's Avatar
fla5h fla5h is offline
 
Join Date: Dec 2002
Posts: 50
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default cross linking two arrays ?

Can someone help ?

I'm trying to write good code, keeping queries to a minimum etc.

What I want to do is take a query which returns an array, then you do a while loop to cycle through the array.

Is there anyway to crossreferece this with another array without putting it into the loop ?

Lets post an example, it will probably help, lol

If you take the karma hack, usercp bit.

PHP Code:

// ############################### start karma ###############################

if($karmaenable==1) {

    
$karmas=$DB_site->query("SELECT karma.postid as postid,karmapos,karmaneg,reason,post.threadid as threadid,post.dateline as dateline,thread.title as title FROM karma LEFT JOIN post ON karma.postid=post.postid LEFT JOIN thread ON post.threadid=thread.threadid WHERE karma.userid='$bbuserinfo[userid]' ORDER BY timestamp DESC LIMIT 0,5");

    
$uk=$DB_site->query_first("SELECT karma FROM user WHERE userid='$bbuserinfo[userid]'");

    
$haskarma=0;
    while(
$karma=$DB_site->fetch_array($karmas)) {

        if (
$karma[karmapos] > $karma[karmaneg])
            
$karmaposneg="karmapos.gif";
        else if (
$karma[karmaneg] > $karma[karmapos])
            
$karmaposneg="karmaneg.gif";
        else
            
$karmaposneg="karmabalance.gif";

        
$karma[timeline]=vbdate($timeformat,$karma[dateline]);
        
$karma[dateline]=vbdate($dateformat,$karma[dateline]);

        
$karma[reason]=bbcodeparse($karma[reason]);

        if (
strlen($karma[title]) > 25)
            
$karma[title] = substr($karma[title],0,23)."<smallfont>...</smallfont>";

        eval(
"\$karmacommentbits .= \"".gettemplate("karma_usercpcommentbits")."\";");
        
$haskarma=1;

    }

    if (
$haskarma==1)
        eval(
"\$karmacomments = \"".gettemplate("karma_usercpcomments")."\";");
    else
        eval(
"\$karmacomments = \"".gettemplate("karma_usercpnocomments")."\";");

if I altered this line

PHP Code:
$karmas=$DB_site->query("SELECT karma.postid as postid,karmapos,karmaneg,reason,post.threadid as threadid,post.dateline as dateline,thread.title as title FROM karma LEFT JOIN post ON karma.postid=post.postid LEFT JOIN thread ON post.threadid=thread.threadid WHERE karma.userid='$bbuserinfo[userid]' ORDER BY timestamp DESC LIMIT 0,5"); 
to this

PHP Code:
$karmas=$DB_site->query("SELECT karma.postid as postid,karmapos,karmaneg,reason,post.threadid as threadid,post.dateline as dateline,thread.title as title,whoadded FROM karma LEFT JOIN post ON karma.postid=post.postid LEFT JOIN thread ON post.threadid=thread.threadid WHERE karma.userid='$bbuserinfo[userid]' ORDER BY timestamp DESC LIMIT 0,5"); 
this would return the

$karmas[whoadded] who return the array
$karma[whoadded] who return the id's one by one in the while loop

What if I wanted to return the username of the user.

I would have to do something like

PHP Code:
$DB_site->query("SELECT username FROM user WHERE userid=$karmas[whoadded]); 
hoo would I link these two queries together so in the while loop I can call

$karma[whoadded] = userid
$karma[username] = username

I hope I have explained this, can anyone help please ?

Am I right I can do this using 2 queries ?
Reply With Quote
  #2  
Old 02-27-2003, 02:16 PM
fla5h's Avatar
fla5h fla5h is offline
 
Join Date: Dec 2002
Posts: 50
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Sorry to bump this thread, but do I take it that its not possible

Or I have not described what I need very well ?

Can anyone comment even if its not the total solution ?

Thanks
Reply With Quote
  #3  
Old 02-27-2003, 04:46 PM
Nomb's Avatar
Nomb Nomb is offline
 
Join Date: Nov 2002
Location: Phoenix, AZ
Posts: 85
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

I think I understand what you want, take a look at this:

PHP Code:
$karmas=$DB_site->query("SELECT karma.postid as postid,karmapos,karmaneg,reason,post.threadid as threadid,post.dateline as dateline,thread.title as title,whoadded,user.username 
                FROM karma, user 
                LEFT JOIN post ON karma.postid=post.postid LEFT JOIN thread ON post.threadid=thread.threadid 
                WHERE karma.userid='
$bbuserinfo[userid]' AND user.userid='$bbuserinfo[userid]'
                ORDER BY timestamp DESC LIMIT 0,5"
); 
Reply With Quote
  #4  
Old 02-27-2003, 05:42 PM
Nomb's Avatar
Nomb Nomb is offline
 
Join Date: Nov 2002
Location: Phoenix, AZ
Posts: 85
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Actually, looking back and re-reading this ... I don’t think you need to do this whole "whoadded" thing at all.

Use the same code I posted above but remove the whoadded from the first line.

Now use these:

$karma[userid]

$karma[username]

* Note: It’s karma, not karma(s)
Reply With Quote
  #5  
Old 02-27-2003, 05:45 PM
fla5h's Avatar
fla5h fla5h is offline
 
Join Date: Dec 2002
Posts: 50
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Nomb, thanks for the reply.

Looking at your post, is this correct ?

When it queries the user table, I was after the username WHERE userid = $whoadded

that would return the usernames of the people who gave me karma ?

But am I able to do the query in this way as it wont know what whoadded is until its run ?

Any ideas ?
Reply With Quote
  #6  
Old 02-27-2003, 06:05 PM
fla5h's Avatar
fla5h fla5h is offline
 
Join Date: Dec 2002
Posts: 50
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

just seen your reply, I dont want my username, as in User=$bbuserinfo[username]. I want the usernames of the users that gave me karma.

their id's are collected in the whoadded column

Can you suggest what i do ?

Thanks for all your help so far
Reply With Quote
  #7  
Old 02-27-2003, 06:21 PM
Nomb's Avatar
Nomb Nomb is offline
 
Join Date: Nov 2002
Location: Phoenix, AZ
Posts: 85
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

O, ok, I didn't know what the hell this hack was lol.

Um ... you're gonna need two queries then because you have two different WHERE conditions.

Pretty sure.
Reply With Quote
  #8  
Old 02-27-2003, 06:37 PM
fla5h's Avatar
fla5h fla5h is offline
 
Join Date: Dec 2002
Posts: 50
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

yep, but do you know how I need to do it ?

If I do the first query I'll get the karma details and the userid of the person who donated the karma.

Then I need to do another query to get the usernames for the user id's

But how do I then combine them ?

Before I put them into the mysql_fetch_array ?
Reply With Quote
  #9  
Old 02-27-2003, 07:12 PM
Nomb's Avatar
Nomb Nomb is offline
 
Join Date: Nov 2002
Location: Phoenix, AZ
Posts: 85
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

How are userid's stored in the whoadded row?

Like this: 6,4,9,18 ?
Reply With Quote
  #10  
Old 02-27-2003, 07:53 PM
fla5h's Avatar
fla5h fla5h is offline
 
Join Date: Dec 2002
Posts: 50
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

it will only be one number in each individual row.

I would guess so anyway.

only one person can add karma to every karma id
Reply With Quote
Reply

Thread Tools
Display Modes

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 07:55 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.09625 seconds
  • Memory Usage 2,276KB
  • 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
  • (5)bbcode_php
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (1)pagenav
  • (1)pagenav_curpage
  • (1)pagenav_pagelink
  • (10)post_thanks_box
  • (10)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (10)post_thanks_postbit_info
  • (10)postbit
  • (10)postbit_onlinestatus
  • (10)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
  • pagenav_page
  • pagenav_complete
  • tag_fetchbit_complete
  • forumrules
  • navbits
  • navbits_complete
  • showthread_complete