There is something wrong with the SUM i made in the query as below:
EDIT I post my query in English so everyone understand what i try to say:
$sql = "SELECT
c.stock,
c.id as cid,
cb.course as ccourse,
cb.price_member as cbprice_member,
cb.price_not_member as cbprice_not_member,
cb.study as cbstudy,
cb.studentid,
(SELECT
SUM(CASE WHEN c.stock > 0 THEN price_member ELSE 0 END) AS subtotal_member,
c.stock
FROM
courses_orders cb
JOIN
courses c
ON
cb.course_id = c.id
WHERE
cb.date_removed IS NULL AND
cb.date_order_mail IS NOT NULL AND
cb.date_pickup IS NULL AND
cb.date_pickup_mail IS NULL AND
cb.studentid = '$studentid' AND
cb.course_id = '$cid' AND
c.stock > 0
) as subtotal_member,
(SELECT SUM(price_not_member) FROM courses_orders WHERE date_removed IS NULL AND date_order_mail IS NOT NULL AND date_pickup IS NULL AND date_pickup_mail IS NULL AND studentid = '$studentid' AND course_id = '$cid') as subtotal_not_member
FROM
courses c
JOIN
courses_orders cb
ON
cb.course_id = c.id
WHERE
c.id = '$cid' AND cb.date_removed IS NULL AND cb.date_pickup IS NOT NULL AND cb.date_pickup_mail IS NULL AND cb.studentid = '$studentid'
";
So, The problem is the SUM(CASE WHEN c.stock > 0 THEN price_member ELSE 0 END) AS subtotal_member and i have subtotal_member twice. I think that is also not correct. If i set cb.price_member i have the error: operand should contain 1 column and if i set price_member (without cb. before) i have the error: price_member is to ambiguous. What i want to do here is to have the total price of all items without the ones where the stock is below 1. So i take here c.voorraad > 0 but the result is always the totalprice with all items and not only the ones who has a stock above 0.
This is the original query (with Dutch items), it is the same as above query with different fields. So ignore this if you have read the EN version.
$sql = "SELECT
c.voorraad,
c.id as cid,
cb.artikel as cbartikel,
cb.prijs_lid as cbprijs_lid,
cb.prijs_niet_lid as cbprijs_niet_lid,
cb.studierichting as cbstudierichting,
cb.studentid,
(SELECT
SUM(CASE WHEN c.voorraad > 0 THEN prijs_lid ELSE 0 END) AS subtotaal_lid,
c.voorraad
FROM
cursusdienst_bestellingen cb
JOIN
cursusdienst c
ON
cb.cursus_id = c.id
WHERE
datum_verwijderd IS NULL AND
datum_reservatie_mail IS NOT NULL AND
datum_afhaling IS NULL AND
datum_afhaling_mail IS NULL AND
studentid = '$studentid' AND
cursus_id = '$cid' AND
c.voorraad > 0
) as subtotaal_lid,
(SELECT SUM(prijs_niet_lid) FROM cursusdienst_bestellingen WHERE datum_verwijderd IS NULL AND datum_reservatie_mail IS NOT NULL AND datum_afhaling IS NULL AND datum_afhaling_mail IS NULL AND studentid = '$studentid' AND cursus_id = '$cid') as subtotaal_niet_lid
FROM
cursusdienst c
JOIN
cursusdienst_bestellingen cb
ON
cb.cursus_id = c.id
WHERE
c.id = '$cid' AND cb.datum_verwijderd IS NULL AND cb.datum_afhaling IS NOT NULL AND cb.datum_afhaling_mail IS NULL AND cb.studentid = '$studentid'
";
The problem is the SUM(CASE WHEN c.voorraad > 0 THEN prijs_lid ELSE 0 END) AS subtotaal_lid and i have subtotaal_lid twice. I think that is also not correct. If i set cb.prijs_lid i have the error: operand should contain 1 column and if i set prijs_lid (without cb. before) i have the error: prijs_lid is to ambiguous.
What i want to do here is to have the total price of all items without the ones where the stock is below 1. So i take here c.voorraad > 0 but the result is always the totalprice with all items and not only the ones who has a stock above 0.
EDIT The table cursusdienst contains the following fields (e.g.):
id prijs_lid prijs_niet_lid artikel voorraad
1 24.00 25.00 Course1 12
2 30.00 35.00 Course2 -10
The table cursusdienst_bestellingen contains the following fields (e.g.):
id cursus_id prijs_lid prijs_niet_lid artikel studentid
1 1 24.00 25.00 Course1 123456789
2 2 30.00 35.00 Course2 123456789
The output in a table (invoice) - main query who gives me the correct output:
Artikel Aantal Prijs
Course1 1 24.00
And below the output table the totalprice table - subquery were it goes wrong:
Subtotal: 24.00
Tax: 1.20
Total: 25.20
So the SUM totalprice_member (=totaalprijs_lid in dutch) here would be 24.00 for the members (lid in dutch) and not 54.00 for the members because the stock of course2 is below 1. Now i have the 54.00 for the totaalprijs_lid what is wrong...
The total code:
<table cellpadding="0" cellspacing="0" width="600" class="w320">
<tr>
<td class="item-table">
<table cellspacing="0" cellpadding="0" width="100%">
<tr>
<td class="title-dark" width="300">
Cursus
</td>
<td class="title-dark" width="163">
Aantal
</td>
<td class="title-dark" width="97">
Totaal
</td>
</tr>
<?php
if (!empty($_POST['bachelor1'])) {
foreach ($cursus as $cid) {
$sql = "
select
c.voorraad,
c.id as cid,
cb.artikel as cbartikel,
cb.prijs_lid as cbprijs_lid,
cb.prijs_niet_lid as cbprijs_niet_lid,
cb.studierichting as cbstudierichting,
cb.studentid,
case when c.voorraad > 0 then
(
select
sum(prijs_lid)
from cursusdienst_bestellingen cbx
where cbx.cursus_id = cb.cursus_id
and cbx.studentid = cb.studentid
and cbx.datum_afhaling is null
and cbx.datum_afhaling_mail is null
and cbx.datum_reservatie_mail is not null
and cbx.datum_verwijderd is null
)
else 0 end as subtotaal_lid,
case when c.voorraad > 0 then
(
select
sum(prijs_niet_lid)
from cursusdienst_bestellingen cbx
where cbx.cursus_id = cb.cursus_id
and cbx.studentid = cb.studentid
and cbx.datum_afhaling is null
and cbx.datum_afhaling_mail is null
and cbx.datum_reservatie_mail is not null
and cbx.datum_verwijderd is null
)
else 0 end as subtotaal_niet_lid
from cursusdienst c
join cursusdienst_bestellingen cb on cb.cursus_id = c.id
where cb.datum_afhaling is not null
and cb.datum_afhaling_mail is null
and cb.datum_verwijderd is null
and cb.studentid = '$studentid'
and c.id = '$cid'
";
$res = mysql_query($sql) or die (mysql_error());
//$subtotaal1 = '';
//$totaal1 = '';
//$btw1 = '';
while($row = mysql_fetch_assoc($res))
{
$cursus_id1 = $row['cid'];
$studierichting1 = $row['cbstudierichting'];
$voorraad1 = $row['voorraad'];
if ($num_rows_lid > 0) {
$prijs1 = round(number_format(($row['cbprijs_lid'] / 1.21), 2, '.', ''), 2);
} else {
$prijs1 = round(number_format(($row['cbprijs_niet_lid'] / 1.21), 2, '.', ''), 2);
}
$artikel1 = $row['cbartikel'];
$aantal1 = '1';
$subtotaal_lid += number_format(round(($row['subtotaal_lid'] / 1.21), 2), 2, '.', '');
$totaal_lid += number_format($row['subtotaal_lid'], 2, '.', '');
$btw_lid = round(number_format(($totaal_lid - $subtotaal_lid), 2, '.', ''), 2);
$subtotaal_niet_lid += number_format(round(($row['subtotaal_niet_lid'] / 1.21), 2), 2, '.', '');
$totaal_niet_lid += number_format($row['subtotaal_niet_lid'], 2, '.', '');
$btw_niet_lid = round(number_format(($totaal_niet_lid - $subtotaal_niet_lid), 2, '.', ''), 2);
?>
<tr>
<td class="item-col item">
<table cellspacing="0" cellpadding="0" width="100%">
<tr>
<td class="product">
<span style="color: #4d4d4d; font-weight:bold;"><?php echo wordwrap($artikel1, 20, "<br />\n"); ?></span>
</td>
</tr>
</table>
</td>
<td class="item-col quantity aantal">
<?php echo $aantal1; ?>
</td>
<td class="item-col">
<?php echo '€ '.($prijs1 * $aantal1); ?>
</td>
</tr>
<?php
//$sql = "UPDATE cursusdienst_bestellingen SET datum_afhaling_mail = NOW() WHERE cursus_id = '$cursus_id1' AND datum_verwijderd IS NULL AND studentid = '$studentid'";
//$res = mysql_query($sql) or die (mysql_error());
} } } ?>
<!--
<tr>
<td class="item-col item">
<table cellspacing="0" cellpadding="0" width="100%">
<tr>
<td class="product">
<span style="color: #4d4d4d; font-weight: bold;">Pink Shoes</span> <br />
Newest styles
</td>
</tr>
</table>
</td>
<td class="item-col quantity aantal">
1
</td>
<td class="item-col price">
$10.50
</td>
</tr>
-->
<tr>
<td class="item-col item mobile-row-padding"></td>
<td class="item-col quantity"></td>
<td class="item-col price"></td>
</tr>
<?php
if($num_rows_lid > 0) {
$subtotaal = $subtotaal_lid;
$btw = $btw_lid;
$totaal = $totaal_lid;
} else {
$subtotaal = $subtotaal_niet_lid;
$btw = $btw_niet_lid;
$totaal = $totaal_niet_lid;
}
?>
<tr>
<td class="item-col item">
</td>
<td class="item-col quantity" style="text-align:right; padding-right: 10px; border-top: 1px solid #cccccc;">
<span class="total-space">Subtotaal</span> <br />
<span class="total-space">BTW</span> <br />
<span class="total-space" style="font-weight: bold; color: #4d4d4d">Totaal</span>
</td>
<td class="item-col price" style="text-align: left; border-top: 1px solid #cccccc;">
<span class="total-space"><?php echo '€ '.$subtotaal; ?></span> <br />
<span class="total-space"><?php echo '€ '.$btw; ?></span> <br />
<span class="total-space" style="font-weight:bold; color: #4d4d4d"><?php echo '€ '.$totaal; ?></span>
</td>
</table>
</td>
</tr>
</table>