ジョブ バスケットのジョブを保持するテーブルがあります。ユーザーとしてログインしていない場合、ジョブは 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