我需要一个有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";
希望它能帮助