2009-09-10 6 views
0

Таблица содержит следующие сведения:сумма в запросе/подзапрос

 
date  |vendor|sales|percent| 
-------------------------- 
2009-03-03| 10 |13.50| 1.30 | 
2009-03-10| 10 |42.50| 4.25 | 
2009-03-03| 21 |23.50| 2.30 | 
2009-03-10| 21 |32.50| 3.25 | 
2009-03-03| 18 |53.50| 5.30 | 
2009-03-10| 18 |44.50| 4.45 | 

Я хочу, чтобы отсортировать в отдельные таблицы в зависимости от даты следующим образом:

 
date  |vendor|sales|percent| 
-------------------------- 
2009-03-03| 10 |13.50| 1.30 | 
2009-03-03| 18 |53.50| 5.30 | 
2009-03-03| 21 |23.50| 2.30 | 

date  |vendor|sales|percent| 
-------------------------- 
2009-03-10| 10 |42.50| 4.25 | 
2009-03-10| 18 |44.50| 4.45 | 
2009-03-10| 21 |32.50| 3.25 | 

я могу получить это сделать, но я не могу получить его, чтобы дать мне итоговые значения для каждой отдельной таблицы, например:

 
date  |vendor|sales|percent| 
-------------------------- 
2009-03-03| 10 |13.50| 1.30 | 
2009-03-03| 18 |53.50| 5.30 | 
2009-03-03| 21 |23.50| 2.30 | 
Total Sales for 2009-03-03 = $90.50 
Total percent for 2009-03-03 = $8.90 

date  |vendor|sales|percent| 
-------------------------- 
2009-03-10| 10 |42.50| 4.25 | 
2009-03-10| 18 |44.50| 4.45 | 
2009-03-10| 21 |32.50| 3.25 | 
Total Sales for 2009-03-03 = $119.50 
Total percent for 2009-03-03 = $11.95 

Я могу получить итоговые суммы для всех, но не для отдельных таблиц эс. Вот мой код:

<?php 
$con = mysql_connect("localhost", $dbUser, $dbPassword); 
if (!$con) 
{ 
die('Could not connect: ' . mysql_error()); 
} 

mysql_select_db("beans", $con); 

$result = mysql_query("SELECT * FROM Deposits WHERE market = '4' ORDER BY eventdate, vendor ASC") or die(mysql_error()); 

$dateChk = 0; 

while($row = mysql_fetch_array($result)) 
{ 
    $date = $row["eventdate"]; 
    $liclass = $row["vendor"]; 
    $url = $row["trxid"]; 
    $amountdep = $row["amount"]; 
    $depcheck = $row["checkno"]; 
     $deposit_Total = $deposit_Total + $amountdep; 
     $deposit_3Total = $deposit_3Total + $depcheck; 
     $deposit_3 = $amountdep/100; 
     $dep_percent = $deposit_3 * 3; 
     $depper_Total = $depper_Total + $dep_percent; 
     $week = date("W", db_date_to_timestamp($date)); 
     $year = date("Y", db_date_to_timestamp($date));   


If($dateChk != $week) 
{  

     echo "<table class=\"adverts\" width=\%100\" cellpadding=\"4\">\n"; 
     echo "<tr><th>Date</th><th>Vendor</th><th>Total Sales</th><th>3% Due</th><th>Week</th></tr>\n"; 
     echo "<tr>"; 
     echo "<td>$date</td>\n";  
     echo "<td>$liclass</td>\n";   
     echo "<td>$ $amountdep</td>\n";    
     echo "<td>$ $depcheck</td>\n"; 
     echo "<td>$week</td>\n";  
     echo "</tr>"; 

} 
else 
{ 
     echo "<tr>"; 
     echo "<td>$date</td>\n"; 
     echo "<td>$liclass</td>\n";     
     echo "<td>$ $amountdep</td>\n";    
     echo "<td>$ $depcheck</td>\n"; 
     echo "<td>$week</td>\n";    
     echo "</tr>"; 

} 
$dateChk = $week; 
} 
     echo "</table>\n"; 
     echo "<p><b>Total reported Market Sales are $ " . $deposit_Total . "</b></p>\n"; 
     echo "<p><b>3 percent of Total reported Market Sales are $ " . $deposit_3Total . "</b></p>\n"; 
?> 
+0

Вы хотите получить запрос sql, который дает вам общее количество для каждой даты? – txwikinger

+0

Да, это правильно - итоговые данные за каждую дату – 2009-09-10 19:14:05

+1

Вы пробовали делать СУММ (продажи) с датой GROUP BY? – mikeschuld

ответ

1

(EDIT: жаль, когда я отправил я увидел, что вам это нужно в запросе!)

$dateChk = 0; 
$firstRow = 1; 

while($row = mysql_fetch_array($result)) 
{ 
    $date = $row["eventdate"]; 
    $liclass = $row["vendor"]; 
    $url = $row["trxid"]; 
    $amountdep = $row["amount"]; 
    $depcheck = $row["checkno"]; 
     $deposit_Total = $deposit_Total + $amountdep; 
     $deposit_3Total = $deposit_3Total + $depcheck; 
     $deposit_3 = $amountdep/100; 
     $dep_percent = $deposit_3 * 3; 
     $depper_Total = $depper_Total + $dep_percent; 
     $week = date("W", db_date_to_timestamp($date)); 
     $year = date("Y", db_date_to_timestamp($date));   

If($dateChk != $week) 
{   
    if($firstRow == 0)   
    { 
     echo "</table>\n"; 
     echo "<p><b>Total reported Market Sales are $ " . $deposit_week_Total . "</b></p>\n";    
     echo "<p><b>3 percent of Total reported Market Sales are $ " . $deposit_week_3Total . "</b></p>\n"; 
     $deposit_week_Total = 0;    
     $deposit_week_3Total = 0; 

    }else 
    { 
     $firstRow = 0; 
    } 

     echo "<table class=\"adverts\" width=\%100\" cellpadding=\"4\">\n"; 
     echo "<tr><th>Date</th><th>Vendor</th><th>Total Sales</th><th>3% Due</th><th>Week</th></tr>\n"; 
     echo "<tr>"; 
     echo "<td>$date</td>\n";  
     echo "<td>$liclass</td>\n";   
     echo "<td>$ $amountdep</td>\n";    
     echo "<td>$ $depcheck</td>\n"; 
     echo "<td>$week</td>\n";  
     echo "</tr>"; 

} 
else 
{ 
     echo "<tr>"; 
     echo "<td>$date</td>\n"; 
     echo "<td>$liclass</td>\n";     
     echo "<td>$ $amountdep</td>\n";    
     echo "<td>$ $depcheck</td>\n"; 
     echo "<td>$week</td>\n";    
     echo "</tr>"; 

} 
$dateChk = $week; 
$deposit_week_Total = $deposit_week_Total + $amountdep;   
$deposit_week_3Total = $deposit_week_3Total + $depcheck; 
} 
     echo "</table>\n"; 
     echo "<p><b>Total reported Market Sales are $ " . $deposit_Total . "</b></p>\n"; 
     echo "<p><b>3 percent of Total reported Market Sales are $ " . $deposit_3Total . "</b></p>\n"; 
?> 
+0

возвращает пустой экран – 2009-09-10 19:37:14

+0

ну, я думаю, что отсутствовал ';' строка 25 [исправлена]. Вы получили сообщение об ошибке? Как устанавливается error_reporting (в вашем php.ini)? – manji

+0

ТОЧНО ЧТО Я СМОТРЕТЬ !!! БЕСКОНЕЧНО БЛАГОДАРЕН! – 2009-09-14 17:31:59

0

SQL

"SELECT date, SUM(sales) FROM Deposits WHERE market = '4' GROUP BY date" 

Istead суммы (продажи), вы должны использовать свои собственные расчеты. Я предлагаю привести их в модель.

+0

не работает - он группирует некоторые, но не возвращает все мои записи. – 2009-09-10 19:33:46

+0

@Tylee: вам также нужно группировать продукты. – erenon

0

Это поможет?

http://www.plus2net.com/sql_tutorial/sql_sum.php

SELECT SUM (sales) FROM `table_name` WHERE `date` = '$date_you_want' 

С моими комментариев ниже:

SELECT SUM (sales) FROM `table_name` WHERE `date` <= '$start_date_of_week' AND `date` >= '$end_date_of_week' 

Так в основном, где дата меньше и больше, чем две даты, которые описывают начало и остановку недели вы хотите .. .

or ... Я думаю, вы также можете добавить дни к значению в mysql

SELECT SUM (sales) FROM table_name WHERE date LIKE '$ yyyy-mm-dd%' ... DATE_ADD код для добавления дней .. или INTERVAL.

+0

Это бегущий стол, основанный на неделе года, поэтому я не хочу указывать каждую неделю или дату. – 2009-09-10 19:41:09

+0

Итак, вы хотите выбрать неделю 1-й недели недели 2-го года? Вы должны уметь определить этот диапазон, а затем использовать его в запросе. Может быть, с ЛЮБИМ. Я использую этот запрос на странице, которую я только что сделал. «SELECT * FROM' schedule_items' WHERE 'start' LIKE '$ ymd%'" Где 'start' - полное поле DATETIME, а $ ymd - значение YYYY-MM-DD, а% - это wild card, поэтому находит все значения, которые соответствуют YYYY-MM-DD. Я думаю, что вы, вероятно, могли бы применить диапазон к этому как-то .. SELECT SUM (sales) FROM 'table_name' WHERE' date' <= $ start_date_of_week И 'date'> = $ end_date_of_week – ian