[英]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";
}
}
為userID
和songID
添加一個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.