【问题标题】:mysql update sequence into one table depending on another tablemysql 根据另一张表更新序列到一张表中
【发布时间】:2014-08-07 11:00:24
【问题描述】:

下面是两张表:

类

            academic_year_id    student_id      standard

                    2               1               10
                    2               2               10
                    2               3               10
                    2               4               10
                    2               5               10
                    2               6               10
                    2               7               11 Science
                    2               8               11 Science

这里的标准不是INT

学生

            student_id      roll_no         name            teacher_approval

                1               0       S Sumeet G                  1
                2               0       Nair Nikhil R               1
                3               0       Nayak Ankita R              0
                4               0       Rathod Ketan P              0
                5               0       Patel Vishal D              1
                6               0       Patel Jignesh R             0
                7               0       Prajapati Bhavesh A         1
                8               0       Shah Harsh N                1

我想做什么:

当老师选择标准 -> 10 并按下按钮“分配卷号”

我希望所有 10 级标准的学生按姓名不按顺序获得卷,并且由老师批准,即teacher_approval = '1'

所以我的学生表如下:

学生

            student_id      roll_no         name            teacher_approval

                1               3       S Sumeet G                  1
                2               1       Nair Nikhil R               1
                3               0       Nayak Ankita R              0
                4               0       Rathod Ketan P              0
                5               2       Patel Vishal D              1
                6               0       Patel Jignesh R             0
                7               0       Prajapati Bhavesh A         1
                8               0       Shah Harsh N                1

到目前为止,我已经尝试过以下代码:

$standard = $_POST['standard']

SET @incr = 0

     UPDATE
        student AS st
        JOIN
        (   SELECT * FROM
        classes AS classes
        WHERE standard = '".$standard."'
        ) AS tmp
        ON tmp.student_id = st.id
        SET
        st.roll_no = @incr:=@incr+1 
        WHERE st.teacher_approval = '1'
        ORDER BY st.name ASC

但它给了我一个错误:update and order by 的使用不正确

有类似经历的人吗?任何帮助,将不胜感激。谢谢。

【问题讨论】:

    标签: php mysql database


    【解决方案1】:

    在 MySql 中,当使用多个表时,您不能将ORDER BY 直接作为UPDATE 的一部分(请参阅此link)。试试这个:

    UPDATE student AS table1
            INNER JOIN (
            SELECT st.student_id, st.roll_no, st.name, st.teacher_approval
            FROM student AS st
                JOIN (
                SELECT * FROM
                classes AS cl
                WHERE cl.standard = '".$standard."'
                ) AS tmp
                ON tmp.student_id = st.student_id
                WHERE st.teacher_approval = '1'
                ORDER BY st.name ASC
            ) AS table2 
            ON table2.student_id = table1.student_id
        SET table1.roll_no = @incr:=@incr+1
        
    

    【讨论】:

    • 错误:UPDATE的目标表st不可更新
    • 很抱歉这个错误。这是由于SET st.roll_no=...、st 不是要更新的表。它应该是student 表。
    猜你喜欢
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多