如何在数组中选择db next next?

时间:2014-10-04 10:35:06

标签: php arrays loops logic

我需要一个有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']);

    }
  }

3 个答案:

答案 0 :(得分:1)

你可以循环直到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']);
}

答案 1 :(得分:1)


您不需要每次都重新执行查询,您将始终只有一个&#39; article_id&#39;在你的$ data数组中 你还必须使用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();
}

答案 2 :(得分:0)

您也可以使用此sql查询将此处理委派给MySql Server

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

希望有所帮助