vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB3 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=15)
-   -   PHP Nesting? (https://vborg.vbsupport.ru/showthread.php?t=116885)

DevilYellow 05-28-2006 03:00 AM

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?

calorie 05-28-2006 05:13 AM

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();


DevilYellow 05-28-2006 11:28 AM

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();


eXtremeTim 05-28-2006 01:51 PM

You can do a groupby and group all the classes with the same name together so they are only showed once.

DevilYellow 05-28-2006 01:57 PM

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

Paul M 05-28-2006 04:21 PM

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.

DevilYellow 05-28-2006 04:27 PM

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 .

calorie 05-28-2006 04:38 PM

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();


DevilYellow 05-28-2006 04:58 PM

Thanks calorie :)

This works :) ... I did do a join tho in the query to make it list it all out.


All times are GMT. The time now is 08:15 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.01124 seconds
  • Memory Usage 1,764KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (4)bbcode_code_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (9)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.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/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.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
  • printthread_start
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete