2015-02-10 46 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