这里我有html表显示来自数据库的记录。如果value1已经在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>";
}
答案 0 :(得分:0)
使用以下代码
尝试<?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转换为标志变量(boolean),并且主循环的每次迭代,我将该变量重置为false(未找到)。我还在内循环中移动了字段检查,如果找到匹配,我设置$ ok = true(匹配找到),并优雅地退出循环(break;)。
当你知道查询是静态的(“SELECT foo FROM bar ORDER BY id ASC”)时,我会看到我是否可以将这些代码清理干净,因为可以通过预填充来更好地处理在SQL命令中使用ARRAY或简单的“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的整数值是一件简单的事情,如果是,则表示另一个表中存在记录。在非常大的数据库上,这可能需要稍长的时间才能执行,但总体来说它会更快并节省与数据库的连接,并且总计结果一次性传递:)