2015-02-10 57 views
0

我正在使用MySQL查询来检查2个表中是否有小于30天的任何结果。mysql检查两个表的结果?

我有表1“供应商的银行细节”和表2“供应商发票”

我所试图做的是,如果结果是表1中找到,那么回声出类型的结果是IE

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'; 
     } 
     } ?> 

回答

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中的列之前,所有在同一行中,现在你将有行在下面的行,所有这些行使用相同的行列。所以你需要调整后续的评估来处理这个问题。

+0

感谢您的建议,但是这给了我一个错误:未收集异常'异常'与消息'DateTime :: _ construct() – 2015-02-10 15:40:08

+0

好吧,所以我已经删除了导致初始错误的日期时间间隔代码,但现在我如果(!is_null($ row3 ['reference'])){ – 2015-02-10 16:15:22

+0

您可能不再有您正在尝试查找的列,则会发生错误,表明索引引用未定义为以下行。答案已更新。 – Prisoner 2015-02-10 17:07:31