2014-01-10 113 views
0

我想通過一個表迭代2個數組的信息。兩個表都有一個相同的「建築」行,對於表格的一個單元格,我想比較這些行的內容。我的代碼如下:迭代和比較2陣列

 <?php 
     $sql = "SELECT b.building, a.building FROM cms_TABLE_B b, cms_TABLE_A a WHERE a.building = b.building"; 
     $result = $database->query($sql); 
     $availabilities[] = $database->fetch_array($result); 
     ?> 

     <?php foreach ($TABLE_ARecords as $record): ?> 

     <div class="table-row"> 
      <div class="property"><span><?php echo htmlencode($record['address']) ?></span></div> 
      <div class="availabilities"><span><?php if(in_array($record['building'], $availabilities)) { echo "success"; } else { echo "fail"; } ?></span></div> 
     </div> 

     <?php endforeach ?> 

我試圖從TABLE_A「建設」的內容,並檢查它是否從表-B「建設」的內容相匹配。最終,如果內容匹配,我想計算他們擁有的匹配數量並將其顯示在表格單元格中。我不認爲我會以正確的方式進行討論,因爲$ availabilities數組甚至沒有正確的信息 - 但使用while會導致表重複其自身。我不想顯示來自TABLE_B的任何信息,我只想引用TABLE_A並顯示一個計數。

+0

好吧,如果你已經有了你需要在數組中的建築物,你可以在php中使用count函數來查看有多少(count($ array))。如果您不需要關於建築物的全部信息,但僅需要匹配的數量,則應在查詢中對它們進行計數,並僅返回該數字。SELECT count(*)FROM cms_TABLE_B b,cms_TABLE_A a WHERE a.building = b。建設 –

回答

2

您的代碼可能有點誤導。要存儲查詢的結果$availabilities[]但你通過$TABLE_ARecords循環

只要你的查詢是正確的,你可以得到使用count($availabilities)

說出您的查詢的次數,你的表是請求的'address'的建設。我相信你正在尋找的查詢將會像

$sql = "SELECT a.building, a.address FROM cms_TABLE_A a 
     LEFT JOIN cms_TABLE_B b ON a.building = b.building"; 
1

它看起來像你試圖打印更多,然後只是「匹配數」。

你在哪裏得到$ record ['address']?沒有你在哪裏查詢你是否得到地址信息。

在這裏猜測。我會這樣做:

$query = "SELECT a.building,a.address,a.otherInfo FROM cms_TABLE_B b, cms_TABLE_A a WHERE a.building = b.building"; 
$result = $database->prepare($query); 
$result->execute(); 
while($row = $result->fetch()) 
{ 
     echo "<tr><td>" . $row['building'] . "</td><td>" . $row['address'] . "</td><td>" . $row['otherInfo'] . "</td></tr>"; 
    //or whatever table format/div format you want to use. 
} 
+2

只是想知道,但你爲什麼使用準備好的聲明,沒有準備任何東西?這有什麼好處嗎? – Joe

+1

你不需要。我只是習慣... – bart2puck