Php 检查MySql数据库中的值范围,如果为空则返回

Php 检查MySql数据库中的值范围,如果为空则返回,php,mysql,database,foreach,Php,Mysql,Database,Foreach,这是我在这个论坛上的第一个问题。我需要创建一个代码,该代码将接受从x到y区域代码的一系列值,并在数据库中检查它们。如果代码在数据库中,它将返回它,当它不在数据库中时,它将返回值和错误。我希望我清楚地知道我需要做什么 以下是我现在掌握的代码: public static function uncountedAreaReport($stocktake_id, $sections,$start,$finish) { if ($start<=$finish) {

这是我在这个论坛上的第一个问题。我需要创建一个代码,该代码将接受从x到y区域代码的一系列值,并在数据库中检查它们。如果代码在数据库中,它将返回它,当它不在数据库中时,它将返回值和错误。我希望我清楚地知道我需要做什么

以下是我现在掌握的代码:

     public static function uncountedAreaReport($stocktake_id, $sections,$start,$finish)
     {
        if ($start<=$finish) {
    $area_qry = "
      SELECT
          sa.area_code,
          sa.stocktake_area_id,
          ss.stocktake_staff_name
      FROM
          stocktake_areas sa
      LEFT JOIN
          stocktake_staff ss
      ON
          ss.stocktake_staff_id = sa.area_checked_user_id                    
      WHERE
          sa.stocktake_id = '{$stocktake_id}'
      AND
          sa.area_code
              BETWEEN ".$start." AND ".$finish."
                ORDER BY sa.area_code ASC;
  ";

    $area_res = db::c()->query($area_qry);
    $report = "
      <table cellspacing='0' class='area_sum_report'>
              <tr>
                  <td class='simple_header' style='width:30%;'><div class='nosplit'>Area Name</div></td>
                  <td class='simple_header' style='width:10%;'><div class='nosplit'>Area Code</div></td>
                  <td class='simple_header' style='width:14%;'><div class='nosplit'>Area Status</div></td>
                  <td class='simple_header' style='width:12%;'><div class='nosplit'>Total Count</div></td>                        
                  <td class='simple_header' style='width:8%;'><div class='nosplit'>Checked</div></td>
                  <td class='simple_header' style='width:13%;'><div class='nosplit'>Checked Date</div></td>
                  <td class='simple_header' style='width:13%;'><div class='nosplit'>Checked By</div></td>
              </tr>
  ";
   $st_data = $area_res->fetchAll();
   foreach ($st_data as $stmem){




        $report .= "
          <tr>
          <td style='text-align:left;'><div class='nosplit'>".$start."</div></td>
          <td><div class='nosplit'>".$stmem['area_code']."</div></td>
          <td><div class='nosplit'>".$row['area_status']."</div></td>
          <td><div class='nosplit'>".$rounded_qty."</div></td>                        
          <td><div class='nosplit'>
      ";

           $start++;

        $report .= "
          </div></td>
              <td><div class='nosplit'>".l::datetime($row['area_checked_date'])."</div></td>
              <td><div class='nosplit'>".$row['stocktake_staff_name']."</div></td>
              </tr>
      ";

        $report .= "</table><br/><br/>";

        return $report; 
}       

}}
现在,如果该值在数据库中,它将返回该值,但如果不在数据库中,它将跳过该值。欢迎提出任何建议

问候,,
Artur

如果要返回单个值,可以通过计算匹配行并执行一些逻辑来实现:

  SELECT (case when count(*) > 0 then 'YES' else 'NO' end) as DoesItExist
  FROM stocktake_areas sa LEFT JOIN
       stocktake_staff ss
       ON ss.stocktake_staff_id = sa.area_checked_user_id                    
  WHERE sa.stocktake_id = '{$stocktake_id}' AND
        sa.area_code BETWEEN ".$start." AND ".$finish."

下面是我用来修改php代码的逻辑概要

调用相同的SQL语句 不要使用fetchall 不要像以前那样使用for循环。 而是使用fetch一次读取一行 使用从开始到结束的循环 迭代值是否等于获取的值? 对 找到该值的输出 取下一行 不 未找到输出值 为下一个迭代值启动循环
您能举例说明返回值和错误是什么意思吗?您不应该在应用程序而不是数据库中执行此操作吗?我在数据库中有一个名为area_code的列。我需要的是下面的if$start IN area_code return YES if$start NOT IN area_code return NO这只是一个简单的解释。听起来您的SQL查询正在工作,您只需要在表示层(即PHP)上工作。当区号不在数据库中时,$st_数据包含什么?当区号在数据库中时,$st_数据包含什么?因此,您基本上只需要检查foreach之前返回的行数,如果它是0,则您需要声明whoa!找不到该代码?我需要检查$start和$finish之间的每个值是否返回了一行,而不是返回的行总数。这对我来说几乎是可行的,但我需要为$start和$finish之间的每个数字执行此操作这听起来对我来说是可行的。我不太确定如何一次获取一行并将其与迭代值进行比较。现在我有了:$row=db::c->query$area\u qry;虽然$row1=$row->fetchColumn{if$row1==$start{echo$start;echo$row1.$status='Success!';echo$status;$start++;}else{echo$start.$echo$row1.'echo'NOPE!';break;}您能给我一个一次获取一行的起点吗?非常感谢,非常感谢。