如何从三个不同的表php中查询Total的SELECT SUM

时间:2013-11-03 14:18:57

标签: php mysql

希望你好人!我在SELECT三个不同的表上有一个很大的问题而SUM有那么总计,所以我可以得到这三个表的总计。 表格如下,我只提到一些领域:

1:付款

id idnumber school_fee  trans_fee
1  va03     10000       20000

2:payment_one

id idnumber school_fee  trans_fee
1  va01     10000       30000

3:payment_two

id idnumber school_fee  trans_fee
1  va02     40000       50000

我已经从每张桌子上得到'总计',我想要的是总结那些我得到的总数,从这三张牌中得到总计。

这是我的php代码;

1:付款:

  <?php

     //include mysql connect

   if (isset($_GET['query'])) 
{    
      $query=$_GET['query'];

      // Instructions if $_POST['value'] exist    
      }  

   // gets value sent over search form

     $min_length = 3;
    // you can set minimum length of the query if you want

    if(strlen($query) >= $min_length){ // if query length is more or equal minimum  
           length then

       $query = htmlspecialchars($query); 
        // changes characters used in html to their equivalents, for example: < to &gt;

    $query = mysql_real_escape_string($query);
    // makes sure nobody uses SQL injection

       $raw_results = mysql_query("SELECT      
    *,SUM(school_fee+trans_fee) 
                    As Total  FROM payment
            WHERE (`class` LIKE '%".$query."%')") or die(mysql_error());

  $raw_results2 = mysql_query("SELECT * FROM payment
        WHERE (`class` LIKE '%".$query."%')") or die(mysql_error());





    // * means that it selects all fields, you can also write: `id`, `title`, `text`
    // articles is the name of our table

       // '%$query%' is what we're looking for, % means anything, for example if $query  
         is  Hello
    // it will match "hello", "Hello man", "gogohello", if you want exact match use  
      `title`='$query'
       // or if you want to match just full word so "gogohello" is out use '% $query %' 
          ...OR ... '$query %' ... OR ... '% $query'


    if(mysql_num_rows($raw_results) > 0){
    if(mysql_num_rows($raw_results2) > 0){
     // if one or more rows are returned do following

        while($results = mysql_fetch_array($raw_results)){
         while($results2 = mysql_fetch_array($raw_results2)){

        // $results = mysql_fetch_array($raw_results) puts data from database into   
               array, while it's valid it does the loop


            // posts results gotten from database(title and text) you can also show id  
                    ($results['id'])
        }{



              echo " &nbsp;Total amount of money payed by&nbsp;" .$results['class']  
                  ."&nbsp;"."class is&nbsp;" . $results ['Total'] . "&nbsp;/=Tshs";



              echo"<br>";   echo"<br>"; 
                               }


                  }
            }
            }
       }

                      ?>

2:payment_one

 <?php

     //include mysql connect

   if (isset($_GET['query'])) 
{    
      $query=$_GET['query'];

      // Instructions if $_POST['value'] exist    
      }  

   // gets value sent over search form

     $min_length = 3;
    // you can set minimum length of the query if you want

    if(strlen($query) >= $min_length){ // if query length is more or equal minimum  
           length then

       $query = htmlspecialchars($query); 
        // changes characters used in html to their equivalents, for example: < to &gt;

    $query = mysql_real_escape_string($query);
    // makes sure nobody uses SQL injection

       $raw_results = mysql_query("SELECT      
    *,SUM(school_fee+trans_fee) 
                    As Total  FROM payment_one
            WHERE (`class` LIKE '%".$query."%')") or die(mysql_error());

  $raw_results2 = mysql_query("SELECT * FROM payment_one
        WHERE (`class` LIKE '%".$query."%')") or die(mysql_error());





    // * means that it selects all fields, you can also write: `id`, `title`, `text`
    // articles is the name of our table

       // '%$query%' is what we're looking for, % means anything, for example if $query  
         is  Hello
    // it will match "hello", "Hello man", "gogohello", if you want exact match use  
      `title`='$query'
       // or if you want to match just full word so "gogohello" is out use '% $query %' 
          ...OR ... '$query %' ... OR ... '% $query'


    if(mysql_num_rows($raw_results) > 0){
    if(mysql_num_rows($raw_results2) > 0){
     // if one or more rows are returned do following

        while($results = mysql_fetch_array($raw_results)){
         while($results2 = mysql_fetch_array($raw_results2)){

        // $results = mysql_fetch_array($raw_results) puts data from database into   
               array, while it's valid it does the loop


            // posts results gotten from database(title and text) you can also show id  
                    ($results['id'])
        }{



              echo " &nbsp;Total amount of money payed by&nbsp;" .$results['class']  
                  ."&nbsp;"."class is&nbsp;" . $results ['Total'] . "&nbsp;/=Tshs";



              echo"<br>";   echo"<br>"; 
                               }


                  }
            }
            }
       }

                      ?>

3:payment_two

 <?php

     //include mysql connect

   if (isset($_GET['query'])) 
{    
      $query=$_GET['query'];

      // Instructions if $_POST['value'] exist    
      }  

   // gets value sent over search form

     $min_length = 3;
    // you can set minimum length of the query if you want

    if(strlen($query) >= $min_length){ // if query length is more or equal minimum  
           length then

       $query = htmlspecialchars($query); 
        // changes characters used in html to their equivalents, for example: < to &gt;

    $query = mysql_real_escape_string($query);
    // makes sure nobody uses SQL injection

       $raw_results = mysql_query("SELECT      
    *,SUM(school_fee+trans_fee) 
                    As Total  FROM payment_two
            WHERE (`class` LIKE '%".$query."%')") or die(mysql_error());

  $raw_results2 = mysql_query("SELECT * FROM payment_two
        WHERE (`class` LIKE '%".$query."%')") or die(mysql_error());





    // * means that it selects all fields, you can also write: `id`, `title`, `text`
    // articles is the name of our table

       // '%$query%' is what we're looking for, % means anything, for example if $query  
         is  Hello
    // it will match "hello", "Hello man", "gogohello", if you want exact match use  
      `title`='$query'
       // or if you want to match just full word so "gogohello" is out use '% $query %' 
          ...OR ... '$query %' ... OR ... '% $query'


    if(mysql_num_rows($raw_results) > 0){
    if(mysql_num_rows($raw_results2) > 0){
     // if one or more rows are returned do following

        while($results = mysql_fetch_array($raw_results)){
         while($results2 = mysql_fetch_array($raw_results2)){

        // $results = mysql_fetch_array($raw_results) puts data from database into   
               array, while it's valid it does the loop


            // posts results gotten from database(title and text) you can also show id  
                    ($results['id'])
        }{



              echo " &nbsp;Total amount of money payed by&nbsp;" .$results['class']  
                  ."&nbsp;"."class is&nbsp;" . $results ['Total'] . "&nbsp;/=Tshs";



              echo"<br>";   echo"<br>"; 
                               }


                  }
            }
            }
       }

                      ?>

任何帮助我都会感激不尽。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您的所有三个表[付款] [payment_one] [payment_two]都有相同的列:id,idnumber,school_fee trans_fee。

你可以使用一个单独的表,并通过引入一个新列来区分它们:tablenum,然后很容易获得你想要的。 请注意,[id]和[tablenum]现在都是主键(复合主键)。

新表架构和数据将是(我不太确定您的idnumber列的用途):

[payment] 
id tablenum idnumber school_fee  trans_fee 
1  0        va03     10000       20000
1  1        va01     10000       30000
1  2        va02     40000       50000

SQL示例:

SELECT 
school_fee,
trans_fee,
(school_fee + trans_fee) as 'total'
FROM payment WHERE id=1