当num_rows == 0时,php循环重新开始

时间:2017-07-24 19:37:52

标签: php mysql

我试图编写一个PHP代码来选择表格表格:

  1. 图像
  2. 有些书没有图片,所以我想跳过它并选择另一本书。 我已经编写了这段代码,但它并不适合我。

    现在我只获得了5条记录!它必须是6,因为我在书籍选择查询中受限制。

    $slider_sql = "select * from books  limit 6";
    $slider_result = $conn->query($slider_sql);
    while($slider_row = $slider_result->fetch_assoc()) {
       extract($slider_row);
    
       $img_sql = "SELECT big_img FROM images WHERE book_id = '$id'";
       $img_rs = $conn->query($img_sql);
       $img_row = $img_rs->fetch_assoc();
    
       if ($img_rs->num_rows == 0) 
           continue; //--> here I want to start while again to select another book.
        echo $book_name.'<br>';
        echo $img_row['big_img'].'<br>';
    } 
    

    感谢您的帮助和时间!

1 个答案:

答案 0 :(得分:3)

而不是在循环中使用子查询(这几乎总是一个坏主意!),而是使用JOIN代替,这简化为一个查询而不是两个查询。然后设置big_img不应为空的条件。这可以保证您只能找到图像与图书匹配的行。 LIMIT仍然只能确保返回6行。 MySQL中的<>!=相同。

$slider_sql = "SELECT b.book_name, i.big_img 
               FROM books b 
               JOIN images i 
                 ON i.book_id=b.id 
               WHERE i.big_img <> '' 
               LIMIT 6";
$result = $conn->query($slider_sql);
while ($row = $result->fetch_assoc()) {
    echo $row['book_name'].'<br>';
    echo $row['big_img'].'<br>';
}