The Arcive of Official vBulletin Modifications Site.It is not a VB3 engine, just a parsed copy! |
|
#1
|
|||
|
|||
Need Programming Help
Code:
$sumgiveaways = $vbulletin->db->query_first("SELECT SUM(field6) AS GiveTotal FROM " . TABLE_PREFIX . "thread"); $giveaways = $sumgiveaways['GiveTotal']; Im really new at this stuff and would like some help with an example so i can understand the logic. Thanks |
#2
|
||||
|
||||
It'll look like this:
Code:
$countgiveaways = $vbulletin->db->query_first("SELECT COUNT(field6) AS GiveTotal FROM " . TABLE_PREFIX . "thread WHERE field6!=0"); |
#3
|
|||
|
|||
Thanks for the fast response much appreciated.
I was able to get my data to display but it adds 2 queries to my forum display page. Code:
$sumgiveaways = $vbulletin->db->query_first("SELECT SUM(field6) AS GiveTotal FROM " . TABLE_PREFIX . "thread"); $giveaways = $sumgiveaways['GiveTotal']; $countgiveaways = $vbulletin->db->query_first("SELECT COUNT(field6) AS GiveTotal FROM " . TABLE_PREFIX . "thread WHERE field6!=0"); $giveaways2 = $countgiveaways['GiveTotal']; that would be many queries What are my options here? Would i have to write this data into a new table which i could call and it would only use 1 query right? Sorry im very new to this. --------------- Added [DATE]1235187964[/DATE] at [TIME]1235187964[/TIME] --------------- I was able to reduce this down to just one query using Code:
$sumgiveaways3 = $vbulletin->db->query_first("SELECT count(field6)AS CountTotal, sum(field6) as SumTotal FROM thread WHERE field6 IS NOT NULL AND thread.forumid = '25'"); $giveaways3 = $sumgiveaways3['CountTotal']; $giveaways4 = $sumgiveaways3['SumTotal']; Now i want to query field7 and display the content. Im a bit unsure where to start with that. There would be multiple rows of content for field7 ex. name1, name2, name3 |
#4
|
||||
|
||||
PHP Code:
|
#5
|
|||
|
|||
Would i be able to combine it all with one query?
im trying to count field6, sum of field6, and display all results of field 7 with value. |
#6
|
||||
|
||||
Quote:
Next, query_first is only going to return one row... So if you don't need to display lots of different field7 data, you should be okay to use it (but you're really going to have to be sure that what you're querying is correct - check out the MySQL syntax for ORDER BY to make sure of that). Just tack it on like you did the others... Code:
$sumgiveaways3 = $vbulletin->db->query_first("SELECT field7, count(field6)AS CountTotal, sum(field6) as SumTotal FROM thread WHERE field6 IS NOT NULL AND thread.forumid = '25'"); $giveaways3 = $sumgiveaways3['CountTotal']; $giveaways4 = $sumgiveaways3['SumTotal']; $giveaways5 = $sumgiveaways3['field7'] For getting multiple rows of content for field7 you'll want to use $vbulletin->db->query(); or $vbulletin->db->query_read(); (query_read is more "secure" since it doesn't accept update or delete/drop statements) instead of query_first... Though you might want to look into the LIMIT syntax for MySQL if you only want a few... Code:
$sumgiveaways3 = $vbulletin->db->query("SELECT field7, count(field6)AS CountTotal, sum(field6) as SumTotal FROM thread WHERE field6 IS NOT NULL AND thread.forumid = '25' ORDER BY field7 DESC LIMIT 5"); $giveaways3 = $sumgiveaways3['CountTotal']; $giveaways4 = $sumgiveaways3['SumTotal']; $giveawayfield7 = array(); while( $row = $vbulletin->db->mysql_fetch_array($sumgiveaways3) ) { array_push($giveawayfield7, $row['field7']); } Finally, the while statement takes each row, and assigns all of the values in that row to a variable called $row, which you can treat as a regular array (print it, store it in another array - it doesn't matter. The query_first automagically does that for you, if you use the regular query you'll have to do that yourself. The one thing I think you're doing wrong is trying to stuff it all into a single query. Queries are not always bad, especially if they're just reading the DB. See, by doing the counts and trying to get multiple rows of data for field7, you're wasting memory. Big time. When you use a count like on a multiple row select statement, every single row is going to have the count information... So here's what you could theoretically do: Code:
$sumgiveaways3 = $vbulletin->db->query("SELECT field7, count(field6)AS CountTotal, sum(field6) as SumTotal FROM thread WHERE field6 IS NOT NULL AND thread.forumid = '25' ORDER BY field7 DESC LIMIT 5"); $giveaways3 = $sumgiveaways3['CountTotal']; $giveaways4 = $sumgiveaways3['SumTotal']; $giveawayfield7 = array(); while( $row = $vbulletin->db->mysql_fetch_array($sumgiveaways3) ) { array_push($giveawayfield7, $row['field7']); echo "Watch me waste memory!<br />Count Total: ".$row['CountTotal']."<br />Sum Total: ".$row['SumTotal']; } $name1 = $giveawayfield7[0]; $name2 = $giveawayfield7[1]; //etc, you get the idea. The array $giveawayfield7 is 0 based. But hey, it's your server. Do what you want. Personally? I'd use the counts in a single query_first like you did and then do the field7 work separately. |
#7
|
|||
|
|||
Much thanks for helping me.
In my attempt to seperate the query i tried the following. Code:
$dataresult = $vbulletin->db->query_read(" SELECT field7 FROM " . TABLE_PREFIX . "thread ORDER BY field7 DESC LIMIT 5 "); while ($data = $vbulletin->db->fetch_array($dataresult)) { // process it here $wow1 = $data[0]; $wow2 = $data[1]; echo "<PRE>"; print_r($data); echo "</PRE>"; print_r($wow1); print_r($wow2); } $stack = array("orange", "banana", "apple", "raspberry"); $name1 = $stack[0]; $name2 = $stack[1]; print_r($stack); echo "<br />"; print_r($name1); print_r($name2); So im totally lost. |
#8
|
||||
|
||||
Quote:
Do this instead. PHP Code:
|
|
|
X vBulletin 3.8.12 by vBS Debug Information | |
---|---|
|
|
More Information | |
Template Usage:
Phrase Groups Available:
|
Included Files:
Hooks Called:
|