2014-03-27 26 views
0

這是我在此論壇中的第一個問題。我需要創建一個代碼來接受從x到y(區號)的一系列值,並在數據庫中檢查它們。如果代碼在數據庫中,它會返回它,當它不在數據庫中時,它會返回值和錯誤。我希望我明確我需要做的事情!檢查MySql數據庫中的值的範圍並返回空值

這裏是我現在所擁有的代碼:

 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; 
}  

}} 

現在,如果它是在數據庫返回的價值,但跳過不用時。歡迎任何建議!

問候, 阿圖爾

+0

你能舉一個例子,你是什麼意思的「返回值和錯誤」?你不應該在應用程序中而不是在數據庫中執行此操作嗎? –

+0

我在數據庫中有一個名爲area_code的列。我需要的是以下 如果$ start IN area_code返回YES if $ start NOT in area_code return NO 這只是簡單的解釋。 – ArtleMaks

+0

聽起來像你的SQL查詢正在工作,你只需要在表示層(即PHP)上工作。當地區代碼不在數據庫中時,$ st_data包含什麼? (而區域代碼在數據庫中時,$ st_data包含的是什麼) – AgRizzo

回答

0

這是邏輯的輪廓我會用來重做你的php代碼。 (因爲你一直在使用它)

  1. 調用同一個SQL語句
  2. 不要使用使用fetchall
  3. 不要使用for循環
  4. 而是使用同時
  5. 讀取1行,可使用一個循環,從開始迭代完成
  6. 迭代值不等於獲取價值?
      1. 輸出值被發現
      2. 獲取下一行
    1. 沒有
      1. 輸出值沒有被發現
  7. 啓動循環下一個迭代的價值e
+0

這聽起來像是對我來說很有用的東西。我不太清楚如何一次獲取一行,並將其與迭代值進行比較。 現在我有這個: $ row = db :: c() - > query($ area_qry); \t而($ ROW1 = $行向> fetchColumn()){ \t \t 如果($ ROW1 == $開始) \t { \t \t回聲$啓動; \t \t echo $ row1。'
'; \t \t $ status ='Success!'。'
'; \t \t echo $ status; \t \t \t \t $ start ++; \t \t \t \t} \t其他 \t { \t回聲$開始「。
'; echo $ row1。'
'; \t echo'NOPE!'。''
'; \t break; \t} 你可以給我一個關於一次讀取一行的開始。非常感謝,並感謝它。 – ArtleMaks

0

如果你想返回一個值,你可以通過計算匹配的行,做一些邏輯得到這樣的:

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." 
+0

這幾乎適用於我,但我需要爲$ start和$ finish之間的每個數字執行此操作。 – ArtleMaks