我需要一个有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']);
}
}
答案 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";
希望有所帮助