[英]Comparing records if exist in another table
在這里,我有html表顯示記錄來自數據庫。 如果table1和table2中都已存在值,我試圖禁用或取消刪除按鈕。 我在while循環中獲取另一個while循環,以從table2中獲取值。 但是我的問題是當我嘗試運行此命令時,只有1行/記錄被禁用或為空。 它僅選擇數據庫中的第一條記錄。 如何將所有item_code存儲在一個變量中? 任何幫助,請!
就像下面的圖片一樣,圓珠筆和mimeo紙已經在table2中,但是圓珠筆刪除按鈕並不是無效的。
$query1 = $mysqli1->query("select * from code WHERE item LIKE '%$search%' OR item_code LIKE '%$search%' OR cat_code LIKE '%$search%' order by item_code ASC");
while($r = $query1->fetch_assoc()){
echo"<tr>
td>".$r['item']."</td>
<td>".$r['cat_code']."</td>
<td>".$r['item_code']."</td>";
result2 = $mysqli->query("SELECT item_code FROM app order by id ASC");
while($rows = $result2->fetch_assoc()){
$ok = $rows['item_code'];
}
if($ok != $r['item_code']) {
echo "<td><a href='#' id='".$r['id']."' class='del'><img src='../images/del.png'></a></td>";
} else {
echo "<td><a href='javascript:void(0)'><img src='../images/stop.png' border='0' width='10' height='10' title='Already Add in Purchase Request' style='cursor: not-allowed;'></a></td>";
}
echo"</tr>";
}
使用以下代碼嘗試
<?php
$query1 = $mysqli1->query("select * from code WHERE item LIKE '%$search%' OR item_code LIKE '%$search%' OR cat_code LIKE '%$search%' order by item_code ASC");
$ok = false;
while($r = $query1->fetch_assoc()){
$ok = false;
echo"<tr>
<td>".$r['item']."</td>
<td>".$r['cat_code']."</td>
<td>".$r['item_code']."</td>";
$result2 = $mysqli->query("SELECT item_code FROM app order by id ASC");
while($rows = $result2->fetch_assoc()){
if($r['item_code'] == $rows['item_code']) {
$ok = true;
break;
}
}
if(!$ok) {
echo "<td><a href='#' id='".$r['id']."' class='del'><img src='../images/del.png'></a></td>";
} else {
echo "<td><a href='javascript:void(0)'><img src='../images/stop.png' border='0' width='10' height='10' title='Already Add in Purchase Request' style='cursor: not-allowed;'></a></td>";
}
echo"</tr>";
}
我所做的就是將$ ok轉換為標志變量(布爾值),並且在主循環的每次迭代中,我都將該變量重置為false(未找到)。 我也將字段檢查移到了內部循環中,如果找到匹配項,則設置$ ok = true(找到匹配項),然后正常退出循環(break;)。
如果您知道查詢是靜態的(“ SELECT foo FROM bar ORDER BY id ID ASC”),則可以通過在數據庫中循環循環來清理這段代碼,可以通過預先填充陣列或SQL命令中的一個簡單的'IN()'就足夠了。
假設“ app”和“ code”表都在同一個數據庫中。
$query1 = $mysqli1->query("SELECT
*,
(SELECT COUNT(app.item_code) FROM app WHERE app.item_code=code.item_code) as `mycheck`
FROM
code,
app
WHERE item LIKE '%$search%' OR item_code LIKE '%$search%' OR cat_code LIKE '%$search%' order by item_code ASC";
while($r = $query1->fetch_assoc()){
echo"<tr>
<td>".$r['item']."</td>
<td>".$r['cat_code']."</td>
<td>".$r['item_code']."</td>";
if(intval($r['mycheck']) == 0) {
echo "<td><a href='#' id='".$r['id']."' class='del'><img src='../images/del.png'></a></td>";
} else {
echo "<td><a href='javascript:void(0)'><img src='../images/stop.png' border='0' width='10' height='10' title='Already Add in Purchase Request' style='cursor: not-allowed;'></a></td>";
}
echo"</tr>";
}
在此示例中,我修改了原始查詢,以將與您在內部循環內搜索的相同結果的COUNT合並為一個名為“ mycheck”的字段。 然后,檢查該字段的整數值是否大於0是一件簡單的事情,如果是,則意味着該記錄存在於另一個表中。 在非常大的數據庫上,這可能需要稍長的時間才能執行,但是總體而言,這樣做會更快,並且可以節省與數據庫的連接,所有結果可以一次全部交付:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.