0

我在 MySQL/PHP 中工作。这是一个邮政编码数据库。第一个表包含邮政编码和每个邮政编码的平均 AGI。但这不是一个完整的邮政编码表,因为 IRS 不包括提交的纳税申报表少于 250 个的邮政编码数据。此外,一些邮政编码用于邮政信箱,这些邮政编码也可能没有任何平均 AGI 数据。

我希望能够通过邮政编码搜索具有平均 AGI 的第一个表,如果在那里找不到邮政编码,我希望它搜索第二个表,并在 PHP 中显示一条消息:

echo "The $zipcode was not found." . "<br>";
if (isset($pobox)) {
    echo "Because $zipcode is a PO Box" . "<Br>";
} else {
    echo "It may contain fewer than 250 tax returns filed." . "<br>";
}

这是 PHP 中对 MySQL 的查询:

$result = mysql_query("
select zip
from zip_codes
where zip=$zipcode;") or exit(mysql_error());

第二个表称为 zip_code_types,其中包含邮政编码是否用于邮政信箱,或者其他独特的东西。

这应该通过在一次搜索中组合两个表来完成吗?还是应该完成两个单独的查询?

如何检查第一个 MySQL 查询是否找不到任何内容?返回什么,在哪里,是否需要另一个函数来检查这个?如果我完全错过了如何做到这一点,请赐教。谢谢!

4

4 回答 4

1

不鼓励使用 mysql_ 函数。相反,应该使用 MySQLi 或 PDO_MySQL 扩展。 要回答您的问题,您可以检查SELECT查询返回的行数,并在需要时继续执行下一个查询,例如:

$result = mysql_query("select zip from zip_codes where zip=$zipcode;") or exit(mysql_error());
if( mysql_num_rows($result) > 0 ) {
   //return the result
}
else {
  //your next query here
}

你的意思是这样的吗

于 2012-10-10T06:07:19.900 回答
1

如果数据不在第一个表中这一事实是有意义的,那么您应该进行两次单独的搜索。既然你想展示一条信息,它似乎是有意义的。您可以使用“联合”运算符在单个选择语句中执行此操作,但是您真的无法判断数据何时来自一个表而不是另一个表。您没有加入任何东西,因此外部连接无济于事(它们会很丑陋,并且解释结果的代码会过于复杂)。不,在我看来,您最好只进行几次搜索。其他人可能有其他一些很棒的见解,但再次搜索并不是什么大不了的事,不是吗?

于 2012-10-10T06:08:17.683 回答
0

你必须这样写你的查询

$result = mysql_query("select zip from zip_codes where zip='$zipcode'") or exit(mysql_error());
if(mysql_num_rows($result) == 0)
{
    //query for searching in another table
}
else {
   // your code
}

并使用MysqliORPDO而不是Mysql_*.

于 2012-10-10T06:07:02.220 回答
0

使用联合查询,但使查询也返回包含源的字段。

像这样。

选择 zip, 'zip' 作为 zip-codes 的来源 where zip=$zip Union 选择 zip, 'pobox' 作为来自 poboxs where zip=$zip 的来源

于 2012-10-10T06:21:08.613 回答