如何使数组中的if选择数据库的下一行


How to make if in array select db next row?

我需要一个有6个索引的数组,
如何选择行并检查是否不在数组中推入?如果在数组中,则选择下一行,直到数组具有6个索引

$data = array();
  for ($ii=0; $ii < 6; $ii++) { 
    $sql = "SELECT * FROM article_category WHERE category_id = :category_id ORDER BY id DESC";
    $stmt = $connect_db_article->prepare($sql);
    $stmt->bindValue(':category_id', $category_id_array[$i]);
    $stmt->execute();
    $article_category_row = $stmt->fetch(PDO::FETCH_ASSOC);
    if (!in_array($article_category_row['article_id'], $data)) {
      array_push($data, $article_category_row['article_id']);
    }
  }

您可以循环直到sizeof($data)==6,类似于;

$data = array();
$sql = "SELECT * FROM article_category WHERE category_id = :category_id ORDER BY id DESC";
$stmt = $connect_db_article->prepare($sql);
$stmt->bindValue(':category_id', $category_id_array[$i]);
$stmt->execute();
while(sizeof($data) < 6 && $article_category_row = $stmt->fetch(PDO::FETCH_ASSOC)) {
  if (!in_array($article_category_row['article_id'], $data))
    array_push($data, $article_category_row['article_id']);
}


您不需要每次都重新执行查询,$data数组中始终只有一个"article_id"
此外,您还必须使用try,catch()来保护您的代码
您可以尝试使用以下代码:

$data = array();
$maxRow = 6;
$cpt = 0 ;
$sql = "SELECT * FROM article_category WHERE category_id = :category_id ORDER BY id DESC";
try {
    $stmt = $connect_db_article->prepare($sql);
    $stmt->bindValue(':category_id', $category_id_array[$i]);
    $stmt->execute();
    while($article_category_row = $stmt->fetch(PDO::FETCH_ASSOC) && $cpt < $maxRow) {
        if (!in_array($article_category_row['article_id'], $data)) {
            array_push($data, $article_category_row['article_id']);
            $cpt++;
        }
    }
}catch(PDOException $pdoException) {
    print $pdoException->getMessage();
}

您还可以通过此sql查询将此处理委托给MySql服务器

$sql = "SELECT DISTINCT(article_id) FROM article_category WHERE category_id = :category_id ORDER BY id DESC LIMIT 6";

希望它能帮助