Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP MySQL在下一个可用编号处停止循环_Php_Mysql - Fatal编程技术网

PHP MySQL在下一个可用编号处停止循环

PHP MySQL在下一个可用编号处停止循环,php,mysql,Php,Mysql,我有一个包含以下信息的数据库: -------------- id | Book | Names 1 | 1 | Tom 2 | 8 | James 3 | 10 | Tom 4 | 2 | Tom 5 | 17 | James 6 | 2 | James 7 | 9 | James 8 | 7 | Tom 9 | 8 | Tom 这张表显示了“汤姆”和“詹姆斯”读的书 以下是我需要的要求: 显示未阅读的下一本书。(例如,汤姆

我有一个包含以下信息的数据库:

--------------
id | Book | Names
1  | 1    | Tom
2  | 8    | James
3  | 10   | Tom
4  | 2    | Tom
5  | 17   | James
6  | 2    | James
7  | 9    | James
8  | 7    | Tom
9  | 8    | Tom
这张表显示了“汤姆”和“詹姆斯”读的书

以下是我需要的要求:

  • 显示未阅读的下一本书。(例如,汤姆的是“3”,詹姆斯的是“1”)

  • 跳过“1”、“10”和“15”册,因为它们不再可用。(以詹姆斯为例,下一本书将是《3》)

  • 如果不能按顺序排列,任何未阅读的随机书籍也可以

  • 以下是我所做的:

    $sql = "Select * FROM books Group By names"; 
        $result = $conn->query($sql);
    
    
        if ($result->num_rows > 0) {
            // output data of each row
            while($row = $result->fetch_assoc()) {
                $sql1 = "SELECT * FROM books WHERE names = '" . $row["names"]. "' ORDER BY book ASC"; 
                $result1 = $conn->query($sql1);
                if ($result1->num_rows > 0) {
                    $newbook = '1';
                    // output data of each row
                    while($row1 = $result1->fetch_assoc()) {
    
                        if ($row1["book"] == $newbook) {
                            echo "Exist<br><br>";
                            $newbook = $newbook+ 1;
                        } else {
                            if ($row1["book"] == '1' || $row1["book"] == '10' || $row1["book"] == '17') {
                                $newbook= $newbook+ 1;
    
                            } else {
                                echo "Add".$newbook."<br><br>";
                                break;
                            }
                        }
                    }
                }
            }
        }
    
    $sql=“按名称从图书组中选择*”;
    $result=$conn->query($sql);
    如果($result->num_rows>0){
    //每行的输出数据
    而($row=$result->fetch_assoc()){
    $sql1=“从名称为“”的图书中选择*”$row[“名称”]。““按图书ASC排序”;
    $result1=$conn->query($sql1);
    如果($result1->num\u rows>0){
    $newbook='1';
    //每行的输出数据
    而($row1=$result1->fetch_assoc()){
    如果($row1[“book”]==$newbook){
    回声“存在

    ”; $newbook=$newbook+1; }否则{ 如果($row1[“book”]=“1”| |$row1[“book”]=“10”| |$row1[“book”]=“17”){ $newbook=$newbook+1; }否则{ 回显“添加”。$newbook。“

    ”; 打破 } } } } } }

    这就是我能走多远。谢谢你的帮助。非常感谢,在MySQL中,日历表方法可能是完全解决这个问题的好方法。首先定义一个序列表,包含从1到最高图书ID的值(我称此表为
    seq_table
    )。然后,要查找给定用户未阅读的最低书籍,只需简单的左连接即可:

    SELECT MIN(t1.Book) AS next_book
    FROM seq_table t1
    LEFT JOIN books t2
        ON t1.Book = t2.Book AND
           t2.Names = 'Tom'
    WHERE
        t2.Book IS NULL;
    
    如果您想随机选择一本不是Tom读的书,那么我们可以使用以下查询:

    SELECT t1.Book AS next_book
    FROM seq_table t1
    LEFT JOIN books t2
        ON t1.Book = t2.Book AND
           t2.Names = 'Tom'
    WHERE
        t2.Book IS NULL
    ORDER BY RAND()
    LIMIT 1;
    

    在我看来,日历表方法可能是一个很好的解决方案,可以在MySQL中完全解决这个问题。首先定义一个序列表,包含从1到最高图书ID的值(我称此表为
    seq_table
    )。然后,要查找给定用户未阅读的最低书籍,只需简单的左连接即可:

    SELECT MIN(t1.Book) AS next_book
    FROM seq_table t1
    LEFT JOIN books t2
        ON t1.Book = t2.Book AND
           t2.Names = 'Tom'
    WHERE
        t2.Book IS NULL;
    
    如果您想随机选择一本不是Tom读的书,那么我们可以使用以下查询:

    SELECT t1.Book AS next_book
    FROM seq_table t1
    LEFT JOIN books t2
        ON t1.Book = t2.Book AND
           t2.Names = 'Tom'
    WHERE
        t2.Book IS NULL
    ORDER BY RAND()
    LIMIT 1;
    

    您将需要另一个表来存储可用的书籍,比如说
    books
    table

    ---------------------------------------------
    id | Book_Title             | Available
    ---------------------------------------------
    1  | One million promises   | no
    2  | Two towers             | yes
    3  | Three musketeers       | yes
    4  | 4th Avenue Cafe        | yes
    5  | Famous Five            | yes
    6  | Six million dollar man | yes
    7  | Seven Stars            | yes
    8  | Eighth Paladin         | yes
    9  | Ninth Heaven           | yes
    
    假设您的read books表名为
    read\u books
    ,您可以通过此查询获得Tom要阅读的下一本书:

    select min(id) from books where Available='yes' and id not in (select book from read_books where names = 'Tom')
    

    您将需要另一个表来存储可用的书籍,比如说
    books
    table

    ---------------------------------------------
    id | Book_Title             | Available
    ---------------------------------------------
    1  | One million promises   | no
    2  | Two towers             | yes
    3  | Three musketeers       | yes
    4  | 4th Avenue Cafe        | yes
    5  | Famous Five            | yes
    6  | Six million dollar man | yes
    7  | Seven Stars            | yes
    8  | Eighth Paladin         | yes
    9  | Ninth Heaven           | yes
    
    假设您的read books表名为
    read\u books
    ,您可以通过此查询获得Tom要阅读的下一本书:

    select min(id) from books where Available='yes' and id not in (select book from read_books where names = 'Tom')
    

    您遗漏了第一个sql字符串中的SELECT。你从脚本中得到了什么输出?我从第一次选择中得到了两个结果。Tom和Jamesyou遗漏了第一个sql字符串中的SELECT。你从脚本中得到了什么输出?我从第一次选择中得到了两个结果。汤姆,还有杰姆斯“书”表就是你所指的“读书”表。我有另一个可用书籍表,可以通过book ID链接。“book”表就是您所指的read_books表。我有另一个表,可以通过book idRandom链接可用的书籍,但它不起作用。它选择所有已读/未读的书籍。如果你能修改它,那将是great@AndrewTsang我的第二个查询绝对返回一条随机记录。也许你的数据有问题,但随机的不起作用。它选择所有已读/未读的书籍。如果你能修改它,那将是great@AndrewTsang我的第二个查询绝对返回一条随机记录。也许你的数据有问题。