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 05-28-2006, 03:00 AM
DevilYellow DevilYellow is offline
 
Join Date: Nov 2004
Posts: 41
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default PHP Nesting?

I am not the most fluent with PHP but I am with other languages ...

What I am trying to do is one query and list out the info, but for each listing it needs its own query. I may be going about it the wrong way (well obviously since its not working).

Code:
function getlist()
 {
         global $db;
 
         $list1 = $db->query_read("
                 SELECT          *
                 FROM            top_list
                 ORDER BY       id
                 ");
 
          if ($db->num_rows($classlist) == 0) 
                  return NULL; 
 
        while($list1row = $db->fetch_array($list1)) {
			
	   $list2 = $db->query_read("

                 SELECT          *
                 FROM            top_list_info
                 WHERE listid = $list1row[id]
                 ORDER BY        id
                 ");	

  $retStr .= "
 
  <tr>
<td class=\"tcat\" colspan=\"6\"><b>$classrow[class_name]</b></td>
</tr>
  <tr>  
  <tr>
<td class=\"alt1\" colspan=\"6\">$classrow[class_desc]</td>
</tr>
     <tr>                              
<td class=\"alt2\" width=\"10%\"><div class=\"smallfont\"><b>Username</b></div></td><td class=\"alt2\"><div class=\"smallfont\"><b>option1</b></div></td><td class=\"alt2\"><div class=\"smallfont\"><b>option2</b></div></td><td class=\"alt2\"><div class=\"smallfont\"><b>option3</b></div></td><td class=\"alt2\" ><div class=\"smallfont\"><b>option4</b></div></td><td class=\"alt2\" width=\"45%\"><div class=\"smallfont\"><b>Notes</b></div></td>
</tr>	 


";

	}

         return "$retStr";
	
 }
 
$timelist = getlist();
This functions fine, but I wanted to add another "while" loop thru the second query but it doesnt like nesting it.

Can anyone get me a step into the right direction?
Reply With Quote
  #2  
Old 05-28-2006, 05:13 AM
calorie calorie is offline
 
Join Date: May 2003
Posts: 2,804
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

This is my best guess as to what you are trying to do. Hope it helps.
Code:
function getlist()
{
	global $vbulletin;

	$list_infos = $vbulletin->db->query_read("
		SELECT top_list_info.class_name AS class_name,
			top_list_info.class_desc AS class_desc
		FROM top_list, top_list_info
		WHERE top_list.id = top_list_info.listid
		ORDER BY top_list.id ASC, top_list_info.id ASC
	");

	$ret_str = '';

	while ($list_info = $db->fetch_array($list_infos))
	{
		$ret_str .= "
			<tr>
				<td class=\"tcat\" colspan=\"6\"><b>" . $list_info['class_name'] . "</b></td>
			</tr>
			<tr>
				<td class=\"alt1\" colspan=\"6\">" . $list_info['class_desc'] . "</td>
			</tr>
			<tr>                              
				<td class=\"alt2\" width=\"10%\"><div class=\"smallfont\"><b>Username</b></div></td>
				<td class=\"alt2\"><div class=\"smallfont\"><b>option1</b></div></td>
				<td class=\"alt2\"><div class=\"smallfont\"><b>option2</b></div></td>
				<td class=\"alt2\"><div class=\"smallfont\"><b>option3</b></div></td>
				<td class=\"alt2\"><div class=\"smallfont\"><b>option4</b></div></td>
				<td class=\"alt2\" width=\"45%\"><div class=\"smallfont\"><b>Notes</b></div></td>
			</tr>
		";
	}

	$vbulletin->db->free_result($list_infos);

	return $ret_str;
}
 
$timelist = getlist();
Reply With Quote
  #3  
Old 05-28-2006, 11:28 AM
DevilYellow DevilYellow is offline
 
Join Date: Nov 2004
Posts: 41
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

That is where I started to take it by doing a Join ...

but then I still run into a problem

for every class_name/class_desc there might be quite a few options that I want to loop thru - and I want each class to only be listed once. So thats also where I am confused.


Code:
function getetlist()
 {
         global $db;
 //THE LIMIT IN THE FOLLOWING QUERY IS MEANT ONLY FOR 
THE RESULTS OF THE SECOND TABLE
$classlist = $db->query_read("
SELECT            toplist1.class_name AS class_name,
toplist1.class_desc AS class_desc,
toplist2.option1 AS option1,	         
toplist2.option2 AS option2,
toplist2.option3 AS option3,
toplist2.option4 AS option4,
toplist2.option5 AS option5,
toplist2.option6 AS option6
FROM toplist1, toplist2
WHERE toplist1.id = toplist2.toplist1id
ORDER BY        toplist1.id, toplist2.option2
LIMIT 10
");
 
          if ($db->num_rows($classlist) == 0) 
                  return NULL; 
 
        while($classrow = $db->fetch_array($classlist)) {
			
				

  $retStr .= "
 
  <tr>
<td class=\"tcat\" colspan=\"6\"><b>$classrow[class_name]</b></td>
</tr>
  <tr>  
  <tr>
<td class=\"alt1\" colspan=\"6\">$classrow[class_desc]</td>
</tr>
     <tr>                              
<td class=\"alt2\" width=\"10%\">
<div class=\"smallfont\"><b>Option1</b></div></td>
<td class=\"alt2\"><div class=\"smallfont\"><b>Option2</b></div></td>
<td class=\"alt2\"><div class=\"smallfont\"><b>Option3</b></div></td>
<td class=\"alt2\"><div class=\"smallfont\"><b>Option4</b></div></td>
<td class=\"alt2\" ><div class=\"smallfont\"><b>Option5</b></div></td>
<td class=\"alt2\" width=\"45%\">
<div class=\"smallfont\"><b>Option6</b></div></td>

</tr>
// THIS IS WHAT I WANT TO RE-LOOP	 
<tr>
<td class=\"alt1\">$classrow[option1]</td>

<td class=\"alt2\">$classrow[option2]</td>
<td class=\"alt1\">$classrow[option3]</td>
<td class=\"alt2\">$classrow[option4]</td>
<td class=\"alt1\">$classrow[option5]</td>
<td class=\"alt2\">$classrow[option6]</td>
</tr>



";

	}

         return "$retStr";
	
 }
 
$timelist = getetlist();
Reply With Quote
  #4  
Old 05-28-2006, 01:51 PM
eXtremeTim eXtremeTim is offline
 
Join Date: Jun 2002
Location: eXtremewebtech.com
Posts: 1,201
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

You can do a groupby and group all the classes with the same name together so they are only showed once.
Reply With Quote
  #5  
Old 05-28-2006, 01:57 PM
DevilYellow DevilYellow is offline
 
Join Date: Nov 2004
Posts: 41
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

When I was thinking of doing two queries I could understand how I wanted to loop each query differently - but writing a query as already mentioned or with a join I still dont know how it would loop thru the classes and then loop each list of options for each class
Reply With Quote
  #6  
Old 05-28-2006, 04:21 PM
Paul M's Avatar
Paul M Paul M is offline
 
Join Date: Sep 2004
Location: Nottingham, UK
Posts: 23,748
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

What fields etc are in your two tables and what exactly are you trying to do with them, display etc - I'm somewhat confused reading this.
Reply With Quote
  #7  
Old 05-28-2006, 04:27 PM
DevilYellow DevilYellow is offline
 
Join Date: Nov 2004
Posts: 41
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Table 1:
id
name
desc

Table 2:
id
"table1_id"
user
time
notes

...display
Class 1 Desc 1
user time 1.2
user time 1.3
user time 1.4

Class 2 Desc 2
user time 2.2
user time 2.3

So to query the first table and loop the results, but for each listing it would loop the times under that class .
Reply With Quote
  #8  
Old 05-28-2006, 04:38 PM
calorie calorie is offline
 
Join Date: May 2003
Posts: 2,804
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

This is another guess as to what you are trying to do. Hope it helps.
Code:
function getetlist()
{
	global $vbulletin;

	$classlist = $vbulletin->db->query_read("
		SELECT toplist1.class_name AS class_name,
			toplist1.class_desc AS class_desc,
			toplist2.option1 AS option1,
			toplist2.option2 AS option2,
			toplist2.option3 AS option3,
			toplist2.option4 AS option4,
			toplist2.option5 AS option5,
			toplist2.option6 AS option6
		FROM toplist1, toplist2
		WHERE toplist1.id = toplist2.toplist1id
		ORDER BY toplist1.id, toplist2.option2
		LIMIT 10
	");

	$ret_str = ''; 
 	$temp_str = '';

	while ($classrow = $vbulletin->db->fetch_array($classlist))
	{
		if ($classrow['class_name'] != $temp_str)
		{
			$ret_str .= "
				<tr>
					<td class=\"tcat\" colspan=\"6\"><b>" . $classrow['class_name'] . "</b></td>
				</tr>
				<tr>
					<td class=\"alt1\" colspan=\"6\">" . $classrow['class_desc'] . "</td>
				</tr>
				<tr>
					<td class=\"alt2\" width=\"10%\"><div class=\"smallfont\"><b>Option1</b></div></td>
					<td class=\"alt2\"><div class=\"smallfont\"><b>Option2</b></div></td>
					<td class=\"alt2\"><div class=\"smallfont\"><b>Option3</b></div></td>
					<td class=\"alt2\"><div class=\"smallfont\"><b>Option4</b></div></td>
					<td class=\"alt2\"><div class=\"smallfont\"><b>Option5</b></div></td>
					<td class=\"alt2\" width=\"45%\"><div class=\"smallfont\"><b>Option6</b></div></td>
				</tr>
			";

			$temp_str = $classrow['class_name'];
		}

		$ret_str .= "
			<tr>
				<td class=\"alt1\">" . $classrow['option1'] . "</td>
				<td class=\"alt2\">" . $classrow['option2'] . "</td>
				<td class=\"alt1\">" . $classrow['option3'] . "</td>
				<td class=\"alt2\">" . $classrow['option4'] . "</td>
				<td class=\"alt1\">" . $classrow['option5'] . "</td>
				<td class=\"alt2\">" . $classrow['option6'] . "</td>
			</tr>
		";
	}

	return $ret_str;
}

$timelist = getetlist();
Reply With Quote
  #9  
Old 05-28-2006, 04:58 PM
DevilYellow DevilYellow is offline
 
Join Date: Nov 2004
Posts: 41
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

Thanks calorie

This works ... I did do a join tho in the query to make it list it all out.
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 11:40 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.02866 seconds
  • Memory Usage 2,257KB
  • 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
  • (4)bbcode_code
  • (1)footer
  • (1)forumjump
  • (1)forumrules
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (1)navbar
  • (3)navbar_link
  • (120)option
  • (9)post_thanks_box
  • (9)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (9)post_thanks_postbit_info
  • (9)postbit
  • (9)postbit_onlinestatus
  • (9)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