mysql检查两个表的结果?

时间:2015-02-10 15:00:55

标签: php mysql

我正在使用MySQL查询检查2个表中是否有不到30天的结果。

我有表1'供应商银行详细信息'和表2'供应商发票'

我想要做的是,如果从表1中找到结果,则回显出结果的类型,即

Result from Table 1           echo{some data from table}      echo{some data from table}

或者如果结果来自表2,则回显以下内容:

Result from Table 2           echo{some data from table}      echo{some data from table}

否则,如果在两个回显中都发现了结果,那么结果多次出现在表1和表2中

即:

 Result from Table 1           echo{some data from table}      echo{some data from table}
  Result from Table 2           echo{some data from table}      echo{some data from table}
  Result from Table 1          echo{some data from table}      echo{some data from table}
  Result from Table 1           echo{some data from table}      echo{some data from table}
  Result from Table 2           echo{some data from table}      echo{some data from table}

我正在尝试按日期组织这些。否则如果没有找到结果显示没有找到结果。我的问题是它不工作,没有显示结果,也没有回应我没有找到的结果。这是我的代码,请有人告诉我我哪里出错了,谢谢

<?php require_once 'config.php'; ?>

<?php
$tbl_name1 = 'supplier_bank_details';
$tbl_name2 = 'supplier_invoices';
$query3 = "select * from $tbl_name2 as $tbl_name2, $tbl_name1 as $tbl_name1 WHERE $tbl_name2.date > NOW() - INTERVAL 30 DAY AND $tbl_name1.date > NOW() - INTERVAL 30 DAY AND $tbl_name2.user_id = '{$_SESSION['id']}' AND $tbl_name1.user_id = '{$_SESSION['id']}' GROUP BY $tbl_name2.user_id ORDER BY $tbl_name2.date AND  $tbl_name1.date DESC";
$result3 = mysql_query($query3) or die( mysql_error() );
while($row3 = mysql_fetch_assoc($result3)){


$datetime1 = new DateTime(); // Today's Date/Time
$datetime2 = new DateTime($row3['date']);
$interval = $datetime1->diff($datetime2);

$s = $interval->format('%d days ago');

if($s === '0 days ago') {
$z = 'amended today';
}else{
$z = 'amended about '.$s.'';
}


$account_number = '****'.substr($row3['account_number'], -4);

if(mysql_num_rows($result3) > 0) {

 // your unique column for Bank Details
            if( !is_null($row3['sort_code'])) {

echo '<div class="contracts_area"><div class="table_header"></div>';
echo '<div class="request"><p>result from table 1</p><p>'.$row3['sort_code'].'</p><p>'.$account_number.'</p><p>'.$z.'</p></div>';
echo '</div>';


            }
            // your unique column for Invoice Details
            if( !is_null($row3['reference'])) { 

                echo '<div class="contracts_area"><div class="table_header"></div>';
echo '<div class="request"><p>result from table 2</p><p>'.$row3['reference'].'</p><p>'.$row3['status'].'</p><p>'.$z.'</p></div>';
echo '</div>';
            }

        }else{

            echo 'No Recent Activity';
        }
        } ?>

1 个答案:

答案 0 :(得分:0)

问题在于,在查询中,您不是要求“表1中的行或表2中的行”独立满足条件。您要求“表1中的行以及表2中的匹配行”,每个行符合相同的条件(它们具有匹配的ID)。

你可能想要的更像是UNION。这基本上需要两个不同的查询(table1中符合条件的行和符合条件的table2中的行)并将它们组合为一个统一的结果列表。

您没有指定架构以确保其有效,但查询可能类似于

SELECT * from $tbl1_name where date > NOW() - INTERVAL 30 DAY and user_id = '{$_SESSION['id']}'
UNION
SELECT * from $tbl2_name where date > NOW() - INTERVAL 30 DAY and user_id = '{$_SESSION['id']}'
ORDER BY date DESC;

请记住,现在这将更改存在哪些列。同样,你没有给我们架构,但是在你从表2中有列后跟表1中的列之前,所有在同一行中,现在你将有行跟随行,所有这些行都使用相同的行列。因此,您需要调整以后的评估来处理这个问题。