问题
I have the following INNER JOIN query:
SELECT b.*, c.date2
FROM (
SELECT a.work, a.amount,
COUNT(*) totalCount,
SUM(Amount) totalAmount
FROM work_times a WHERE Organisation=?
GROUP BY a.work, a.amount
) b
INNER JOIN
(
SELECT a.work, a.amount, DATE_FORMAT(Date,'%D %M %Y') date2,
date
FROM work_times a
) c ON b.work = c.work and b.amount=c.amount
ORDER BY b.work, b.totalCount, c.date
You can see it in action on a sample table on SQL fiddle here.
My aim is to return the following:
5 consultancy sessions @ £50 each: £250
1st February 2013
8th February 2013
15th February 2013
22nd February 2013
1st March 2013
3 therapy sessions @ £40 each: £120
2nd February 2013
9th February 2013
16th February 2013
2 therapy sessions @ £20 each: £40
3rd February 2013
10th February 2013
But using the following PHP:
$stmt->bind_param("s", $name1);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($work,$amount,$count,$total_group,$date);
while ($stmt->fetch()) {
if ($count>1) {
echo $count." ".$work."s @ £".$amount." each<br><br>";
echo date("jS F Y",strtotime($date))."<br><br>";
$total_work=$total_work+$total_group;
}
else {
echo $count." ".$work." @ £".$amount."<br><br>";
echo date("jS F Y",strtotime($date))."<br><br>";
$total_work=$total_work+$total_group;
}
}
I am getting one line for each row, rather than the grouping, i.e.:
5 Consultancy Sessions @ £50.00
1st February 2013
5 Consultancy Sessions @ £50.00
8th February 2013
5 Consultancy Sessions @ £50.00
15th February 2013
...etc
And I am not sure how to amend my PHP to get the desired output.
CURRENT OUTPUT
5 Consultancy Sessions @ £50.00
1st February 2013
8th February 2013
15th February 2013
22nd February 2013
1st March 2013
2nd February 2013
9th February 2013
16th February 2013
3rd February 2013
10th February 2013
回答1:
The problem seems to be in the fact that you're calling the "head" for each row. Therefore, you should first check if it's been already called. I hope the following may help you:
$stmt->bind_param("s", $name1);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($work,$amount,$count,$total_group,$date);
$last_work = "";
while ($stmt->fetch()) {
if($work != $last_work || $amount != $last_amount){
if ($count>1) {
echo "<br>".$count." ".$work."s @ £".$amount." each<br><br>";
}
else {
echo "<br>".$count." ".$work." @ £".$amount."<br><br>";
}
$last_work = $work;
$last_amount = $amount;
}
echo date("jS F Y",strtotime($date))."<br>";
$total_work=$total_work+$total_group;
}
I moved the echo date
and $total_work
outside as they were being called equally in both cases ($count >1
and else
)
来源:https://stackoverflow.com/questions/15024249/passing-sql-variables-from-inner-join-sql-query-to-php-script