簡體   English   中英

如何檢查是否存在包含MySQL中某些內容的行

[英]How to check if a row exists which contains certain content in MySQL

我正在使用以下代碼在我的應用程序中插入特定歌曲的評級。

我正在記錄songID,對該歌曲的評級以及對該歌曲進行投票的用戶ID。

我想做的是防止用戶對某首歌“已經”投票時對其進行投票。 因此,我需要能夠在插入之前檢查表中是否存在一行。

所以...如果userID = 1,songID = 1,等級=4。這應該可以插入。

如果隨后嘗試插入userID = 1,songID = 1,rating = *,則插入失敗

但是,如果用戶對另一首歌曲進行投票...則應允許插入,並且應該插入。

有什么想法我會怎么做嗎?

//Add rating to database

if(!empty($_POST['rating']) && isset($_POST))
{
    //make variables safe to insert
  $rating = mysql_real_escape_string($_POST['rating']);
  $songid = mysql_real_escape_string($_POST['song_id']);

    //query to insert data into table
    $sql = "
        INSERT INTO wp_song_ratings
        SET
        songid = '$songid',
        rating = '$rating',
        userid = '$user_id'";
    $result = mysql_query($sql);
    if(!$result)
    {
        echo "Failed to insert record";
    }
    else
    {
        echo "Record inserted successfully";
    }
}

userIDsongID添加一個UNIQUE KEY 如果您不希望他們更改其評分,則不應從前端允許它,但仍要在后端進行檢查。 如果安裝了UNIQUE KEY ,它將失敗。

ALTER TABLE `wp_song_ratings` ADD UNIQUE KEY `user_song_key` (`userID`, `songID`)

聽起來您需要在mysql中使用存儲過程-此處提供更多信息http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html

您可以首先執行SELECT語句:

if(!empty($_POST['rating']) && isset($_POST))
{
    //make variables safe to insert
  $rating = mysql_real_escape_string($_POST['rating']);
  $songid = mysql_real_escape_string($_POST['song_id']);

  $select_sql = "SELECT COUNT(*) WHERE songid='$songid' AND userid='$user_id'";
  $select_result = mysql_query($select_sql);

  if ( mysql_num_rows($select_result) > 0 )
  {
    /* already voted! */
  }
  else
  {
    //query to insert data into table
    $sql = "
        INSERT INTO wp_song_ratings
        SET
        songid = '$songid',
        rating = '$rating',
        userid = '$user_id'";
    $result = mysql_query($sql);
    if(!$result)
    {
        echo "Failed to insert record";
    }
    else
    {
        echo "Record inserted successfully";
    }
  }
}

當然,還有其他實現此類事情的方式(例如存儲過程)。

將以下WHERE子句添加到您的sql語句中

WHERE NOT EXISTS (SELECT 1 FROM wp_song_ratings WHERE songid= '$songid' and userid = '$user_id')

可以在Oracle和SQL Server上運行...對MySQL不確定

如何使用REPLACE查詢呢? REPLACE查詢將替換具有相同主鍵(或唯一鍵)且沒有錯誤的舊查詢。 我認為某些用戶可能想更新他們的投票。

我會更改加載方式的視圖,方法是在當前用戶已經為歌曲投票后不允許“投票”,或者如果您想讓他們更改評分,請更新該內容,而不是在同一用戶中對該用戶進行插入歌曲..

如果已定義該表,使得(songid,userid)對於每個記錄都必須是唯一的(通過將這對定義為鍵),則如果用戶嘗試對同一首歌曲進行重新投票,則插入將失敗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM