PHP行为很

时间:2017-06-09 19:03:02

标签: php mysql sql iteration

好的,所以我真的不知道标题是什么,因为对我来说不应该有问题。

我正在尝试构建一个SQL查询,我能做到的唯一方法是在第一个ID =之后添加一个字符串OR语句。

由于我不能在ID = X之间有一个OR状态,我认为我做了一个简单的事情,只计算为1然后每次迭代后1,它简单地放置" OR&# 34;在下一个号码之前。

这在第二次迭代中工作正常,但第三次和第四次跳过在数字之间添加OR,因此它变为ID = 123或56 43 12.

代码是一个更大的东西的一部分,所以}}}}}}}}}}}}}}}}}}}}}

       $count=0;
      while($resultArr = $result->fetch_array(MYSQLI_NUM)){
          if($count>=1)
          {
              echo "IN COUNT IF<br>";
              $sqlQuery .= " OR ";
          }
          else  $count++;
          echo "COUNT= ". $count . "<br>";
          $sqlQuery .= " {$resultArr[0]} ";
          if (!$result) {
              die('Contact Admin! Invalid SQL query: ' . mysql_error());
          }
      }
   }
   # lägg till sista biten och kolla hur det ska sorteras
   $sqlQuery .= "AND post_status='publish' " . $this->returnSort();
   echo "DEBUG- buildKategoryQuery QUERY= <br>{$sqlQuery}<br>";
   return $sqlQuery;

}

这是从echo:

添加最后一位后生成的查询

COUNT = 1

如果计算

COUNT = 1

COUNT = 1

DEBUG- buildKategoryQuery QUERY =

SELECT post_title,guid,post_date,comment_count FROM wp_posts WHERE ID = 159 OR 595 187 AND post_status =&#39; publish&#39;

所以看起来它基本上在第三次迭代时说$ count不再等于或高于1,但它也不想添加到计数中。所以它基本上只是跳过整个if / else语句...

编辑: 对于那些要求

的人来说,这是完整的功能
function buildKategoryQuery()
   {
       # första biten
       $sqlQuery = "SELECT post_title, guid, post_date, comment_count FROM
       `wp_posts` WHERE ID =";      # "{$resultArr[0]} AND post_status='publish' ";

       # börja loopa och kolla vilka kategorier att leta efter
       foreach ($this->catMap as $key => $value) {
           # kolla ifall kategori är "vald" och isåfall hämta den
           if(!$this->kategoriArr[$key]) continue;
           # hämta post IDs
           $katCommand = "SELECT object_id FROM `wp_term_relationships` WHERE
           term_taxonomy_id=" . $value;
           $result = $this->sql->query($katCommand);
          // echo "number of rows returned for {$key}-{$value}: ".$result->num_rows . "</br>"; // debug - visa rows och kategori, id
           if (!$result) {
               die('Contact Admin! Invalid SQL query: ' . mysql_error());
           }
           # bygg fullt kommand
           $count=0;
          while($resultArr = $result->fetch_array(MYSQLI_NUM)){
              if($count>=1)
              {
                  echo "IN COUNT IF<br>";
                  $sqlQuery .= " OR ";
              }
              else  $count++;
              echo "COUNT= ". $count . "<br>";
              $sqlQuery .= " {$resultArr[0]} ";
              if (!$result) {
                  die('Contact Admin! Invalid SQL query: ' . mysql_error());
              }
          }
       }
       # lägg till sista biten och kolla hur det ska sorteras
       $sqlQuery .= "AND post_status='publish' " . $this->returnSort();
       echo "DEBUG- buildKategoryQuery QUERY= <br>{$sqlQuery}<br>";
       return $sqlQuery;
   }

3 个答案:

答案 0 :(得分:1)

我相信你想说的是IN

SELECT * FROM table WHERE id = 159 OR 595 OR 187是无效的SQL;相反,它应该是SELECT * FROM table WHERE id = 159 OR id = 595 OR id = 187

较短的语法是使用IN运算符:SELECT * FROM table WHERE id IN (159, 595, 187)

答案 1 :(得分:1)

添加“OR”的更简单方法是使用数组:

$parts = array();
while($resultArr = $result->fetch_array(MYSQLI_NUM)) { 
    $parts[] = $resultArr[0];
}

if( !empty( $parts ) ) {
    $sqlQuery .= "(" . implode( " OR ", $parts ) . ")";
}

希望这有帮助。

编辑: 关于为什么你的循环不能按预期工作:你只在其他情况下递增你的$ count,而不是大多数迭代结束的if情况......

答案 2 :(得分:1)

#Reads through each frame, calculates the timestamp, places it on the frame and #exports the frame to the output video. while current_frame < total_frames: success, image = video.read() elapsed_time = video.get(cv2.CAP_PROP_POS_MSEC) current_frame = video.get(cv2.CAP_PROP_POS_FRAMES) timestamp = initial + dt.timedelta(microseconds = elapsed_time*1000) cv2.putText(image, 'Date: ' + str(timestamp)[0:10], (50,int(height-150)), cv2.FONT_HERSHEY_COMPLEX_SMALL, 2, (255, 255, 255), 3) cv2.putText(image, 'Time: ' + str(timestamp)[11:-4], (50,int(height-100)), cv2.FONT_HERSHEY_COMPLEX_SMALL, 2, (255, 255, 255), 3) pipe.stdin.write(image.tostring()) 在foreach循环的每次迭代期间运行,$katCommand也会重置为0。当您尝试添加到外部查询并依赖该$count变量来确定是否添加&#34; OR&#34;时,这会出现问题。到WHERE子句。

您可以将所有内容组合到一个查询中,而不是运行多个SQL查询:

$count