2013-02-22 70 views
3

我有以下INNER JOIN查询:传递SQL变量连接SQL查询到PHP脚本

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 

你可以看到它在行动上一个示例表上的SQL小提琴here

我的目标是返回如下:

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 

但是,使用下面的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 @ &pound;".$amount." each<br><br>"; 
      echo date("jS F Y",strtotime($date))."<br><br>"; 
      $total_work=$total_work+$total_group; 
     } 
     else { 
      echo $count." ".$work." @ &pound;".$amount."<br><br>"; 
      echo date("jS F Y",strtotime($date))."<br><br>"; 
      $total_work=$total_work+$total_group; 
     } 

     } 

我收到一条线的每一行,而不是分组,即:

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 

而我不知道如何修改我的PHP来获得所需的输出。

电流输出

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

这个问题似乎是,我们在调用“头”每一行的事实。因此,您应该先检查它是否已被调用。我希望下面的可以帮助你:

$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 @ &pound;".$amount." each<br><br>"; 

     } 
     else { 
      echo "<br>".$count." ".$work." @ &pound;".$amount."<br><br>"; 
     } 
     $last_work = $work; 
     $last_amount = $amount; 
    } 
    echo date("jS F Y",strtotime($date))."<br>"; 
    $total_work=$total_work+$total_group; 
} 

我感动的echo date$total_work外面他们被在两种情况下($count >1else

+0

感谢同样调用。这似乎是沿着正确的路线,但输出仍然不是很正确 - 我只得到一个分组返回$ last_work变量停止任何进一步的分组被添加。 – Nick 2013-02-22 13:11:11

+0

那么,在不一样的情况下,它应该添加一个新的“头”。我能否看到输出对解决方案有新的尝试? :) – Sikian 2013-02-22 13:18:07

+0

我已经添加了当前的输出到我的问题的结尾。 – Nick 2013-02-22 13:23:28