如何在Select-Option中展示post表无匹配categoryID的分类名称
How to Show Only Unused Categories in a Select Dropdown
我来帮你搞定这个问题!你当前的代码会取出分类表中的所有选项,我们只需要调整SQL查询语句,就能筛选出那些从未被post表使用过的分类。
两种可行的SQL查询方案
方案1:使用NOT IN子查询
这种方式直观易懂,先获取post表中所有已使用的分类ID,再筛选出分类表中不在这个列表里的项:
SELECT * FROM category WHERE categoryID NOT IN (SELECT categoryID FROM post)
方案2:使用LEFT JOIN(适合大数据量场景)
如果你的数据量比较大,左连接的性能通常会更优,它通过匹配两张表的关联字段,只保留分类表中没有对应post记录的项:
SELECT c.* FROM category c LEFT JOIN post p ON c.categoryID = p.categoryID WHERE p.categoryID IS NULL
修改后的完整代码
把原来的SQL替换成上面任意一种即可,这里用NOT IN的版本为例,还额外加了空结果的判断优化用户体验:
<select name="categoryID" > <?php // 修改SQL语句,筛选未被使用的分类 $catlist_sql="SELECT * FROM category WHERE categoryID NOT IN (SELECT categoryID FROM post)"; $catlist_qry=mysqli_query($con, $catlist_sql); // 检查是否有结果,避免空下拉 if(mysqli_num_rows($catlist_qry) === 0) { ?> <option value="">所有分类已被使用</option> <?php } else { $catlist_rs=mysqli_fetch_assoc($catlist_qry); do { ?> <option value="<?php echo $catlist_rs['categoryID']; ?>"> <?php echo $catlist_rs['categoryID'] . ' - ' . $catlist_rs['name']; ?></option> <?php } while ($catlist_rs=mysqli_fetch_assoc($catlist_qry)); } ?> </select>
内容的提问来源于stack exchange,提问作者Abegail Grace Ulanday
相关产品推荐
相关产品推荐

