The Arcive of Official vBulletin Modifications Site.It is not a VB3 engine, just a parsed copy! |
|
#1
|
|||
|
|||
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(); Can anyone get me a step into the right direction? |
#2
|
|||
|
|||
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(); |
#3
|
|||
|
|||
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(); |
#4
|
|||
|
|||
You can do a groupby and group all the classes with the same name together so they are only showed once.
|
#5
|
|||
|
|||
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
|
#6
|
||||
|
||||
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.
|
#7
|
|||
|
|||
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 . |
#8
|
|||
|
|||
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(); |
#9
|
|||
|
|||
Thanks calorie
This works ... I did do a join tho in the query to make it list it all out. |
|
|
X vBulletin 3.8.12 by vBS Debug Information | |
---|---|
|
|
More Information | |
Template Usage:
Phrase Groups Available:
|
Included Files:
Hooks Called:
|