0

ジョブ バスケットのジョブを保持するテーブルがあります。ユーザーとしてログインしていない場合、ジョブは Cookie からセッション ID を取得します。

後でログインし、サインアウトしたバスケットとサインインしたバスケットにジョブが既にある場合は、それらを ID と一緒に追加し、session_id を 0 に設定します。

テーブルは次のようになります。

vacancy_id  |  user_id  |  session_id

  10            1            0

  10            0            1636252

  4             0            1636252

そのため、SQL を実行すると、ID 10 の欠員とセッション ID が削除され、ID 4 とセッション ID の欠員はセッション ID 0 と user_id 1 になります。

以下でこれを試しましたが、エラーが発生しました

「FROM 句で更新対象のテーブル 'v1' を指定することはできません」

コード:

            Dim current_sessionid As String = GetCookie("job_session_id")
            If String.IsNullOrEmpty(current_sessionid) Then
            Else

                Dim oConn3 As New MySqlConnection(DSN)
                Dim oCmd3 As New MySqlCommand
                Dim oRS3 As MySqlDataReader = Nothing

                Dim oConn4 As New MySqlConnection(DSN)
                Dim oCmd4 As New MySqlCommand
                Dim oRS4 As MySqlDataReader = Nothing

                Try

                    oConn3.Open()

                    oCmd3.Connection = oConn

                    oCmd3.CommandText = "UPDATE vacancies_basket AS v1 SET v1.user_id = @user_id, v1.session_id = '0' WHERE session_id = @currentsession AND " _
                    & "(SELECT v2.vacancy_id FROM vacancies_basket AS v2 WHERE user_id = @user_id) <> v1.vacancy_id"
                    oCmd3.Prepare()
                    oCmd3.Parameters.AddWithValue("@user_id", User.User_ID)
                    oCmd3.Parameters.AddWithValue("@currentsession", GetCookie("job_session_id"))
                    oCmd3.ExecuteNonQuery()

                    oConn3.Close()
                    oConn3.Dispose()
                    oCmd3.Dispose()
                    oRS3 = Nothing

                    oCmd4.CommandText = "DELETE FROM vacancies_basket WHERE session_id=@currentsession"
                    oCmd4.Prepare()
                    oCmd4.Parameters.AddWithValue("@currentsession", GetCookie("job_session_id"))
                    oCmd4.ExecuteNonQuery()

                Catch ex As Exception
                    SendAlertEMail("App_Code/functions.vb/LogUserId()/jobbasket", ex)
                Finally
                    oConn4.Close()
                    oConn4.Dispose()
                    oCmd4.Dispose()
                    oRS4 = Nothing
                End Try
            End If
4

0 に答える 0