我有一个选择列表,显示一个列表,显示:
Tech Name | Tech Zip | Tech States (Value=Tech ID)
所有这些都来自记录集。现在,我想看看这个技术是否存在于另一个表中。如果他没有,那么我想在选择列表中显示他。否则,不理他。
更新
使用下面答案中的内容,这就是我想出来的。我认为这是有效的。这是最好的方法吗?
mysql_select_db($database_localhost, $localhost);
$query_NeededTechs = "
SELECT l.*
FROM zip_tech l
WHERE NOT EXISTS
(
SELECT tech_name
FROM zip_zip r
WHERE r.tech_name = l.tech_name
)
";
$NeededTechs = mysql_query($query_NeededTechs, $localhost) or die(mysql_error());
$row_NeededTechs = mysql_fetch_assoc($NeededTechs);
$totalRows_NeededTechs = mysql_num_rows($NeededTechs);
我的选择列表:
<select name="select" id="select">
<?php
do {
?>
<option value="<?php
echo $row_NeededTechs['tech_id']?>"><?php echo $row_NeededTechs['tech_name'] . " | " . $row_NeededTechs['tech_zip'] . " | " . $row_NeededTechs['states']?></option>
<?php
} while ($row_NeededTechs = mysql_fetch_assoc($NeededTechs));
$rows = mysql_num_rows($NeededTechs);
if($rows > 0) {
mysql_data_seek($NeededTechs, 0);
$row_NeededTechs = mysql_fetch_assoc($NeededTechs);
}
?>
</select>
答案 0 :(得分:1)
我不完全确定我理解你的问题,但似乎你想从一个表中选择所有'技术'而在另一个表中不存在?
如果是这样,这对你来说是完美的阅读[附例]: NOT IN vs. NOT EXISTS vs. LEFT JOIN / IS NULL
哪种方法最好选择一个表中存在但另一个表中缺少的值?
这样:
SELECT l.*
FROM t_left l
LEFT JOIN
t_right r
ON r.value = l.value
WHERE r.value IS NULL
或者这个:
SELECT l.*
FROM t_left l
WHERE l.value NOT IN
(
SELECT value
FROM t_right r
)
或者这个:
SELECT l.*
FROM t_left l
WHERE NOT EXISTS
(
SELECT NULL
FROM t_right r
WHERE r.value = l.value
)
<强>来源:强>