PDA

View Full Version : [SQL] - adding the SUM in an array


Dr.CustUmz
05-06-2020, 03:55 AM
So I am pulling data from my table like this:

$data = $db->query_read ("SELECT * FROM " . TABLE_PREFIX . "someTable WHERE userid=" . intval ($vbulletin->userinfo['userid']));
while ($var = $db->fetch_array ($data)) {
$var = $data;
}

So: $var[row] is usable in my templates (and that is all working fine)

The issue is this table stores multiple entries per userid, thus only displaying the latest table entry as the results in templates. I want to add each entry together, that way when I use the $var[row] in my template it gives a TOTAL rather than the latest entry.

Now I know I can do this with the following method:
$var = $vbulletin->db->query_first("SELECT SUM(row) AS total FROM " . TABLE_PREFIX . "table WHERE userid = " . $vbulletin->userinfo['userid']);

Then use $var[total] but I have to do this for almost every row on the table and feel (if possible) it would be better to do this as an array.

Anyone want to help me out with this.

Example of my table:

userid__row___row2__row3___row4
1______1_____3____3.00_____4
1______1_____2____2.00_____3
2______1_____5____5.00_____6
1______1_____3____3.00_____4
2______1_____3____3.00_____4

So my goal $vars would return the following results in templates (for userid 1)

$var[row] = 3
$var[row2] = 8
$var[row3] = 8.00
$var[row4] = 11

shka
05-06-2020, 05:34 AM
So I am pulling data from my table like this:

$data = $db->query_read ("SELECT * FROM " . TABLE_PREFIX . "someTable WHERE userid=" . intval ($vbulletin->userinfo['userid']));
while ($var = $db->fetch_array ($data)) {
$var = $data;
}


First: Don't use "select *". You should query only columns you need. You (and readers of your code) have more control over data flow and will thank it later. ;)
SELECT userid, row, row2, row3, row4 FROM...

Second: I don't have vB3, but isn't there an fetch_all? You don't need to read the data line by line.



Anyone want to help me out with this.

Example of my table:

userid__row___row2__row3___row4
1______1_____3____3.00_____4
1______1_____2____2.00_____3
2______1_____5____5.00_____6
1______1_____3____3.00_____4
2______1_____3____3.00_____4

So my goal $vars would return the following results in templates (for userid 1)

$var[row] = 3
$var[row2] = 8
$var[row3] = 8.00
$var[row4] = 11

If I understood correct GROUP BY combined with SUM should be your friend


SELECT
userid,
SUM(row) AS row_sum,
SUM(row2) AS row2_sum,
SUM(row3) AS row3_sum,
SUM(row4) AS row4_sum
FROM
" . TABLE_PREFIX . "someTable
GROUP BY
userid;