[英]How to keep html up to date with metadata from shoutcast using php and ajax without stream's password?
[英]How to make sure to insert songs in songhistory database from shoutcast history without duplicates when date changes?
我正在從廣播服務器獲取最近播放的10首歌曲,並希望將它們插入我的數據庫中,以便跟蹤在特定日期和時間播放的歌曲。
這是表的結構:
`id_played` int(11) AUTO_INCREMENT
`date_played` date
`time_played` time
`artist` varchar(255)
`title` varchar(255)
這是我將歌曲插入表中的代碼:
$date = date("Y-m-d");
for($i = 0; $i < $songsCount; $i++) {
$stmtGetExisting = $mysqli->prepare("SELECT id_played FROM played WHERE date_played = ? AND time_played = ? AND artist = ? AND title = ?");
$stmtGetExisting->bind_param("ssss", $date, $times[$i], $artists[$i], $titles[$i]);
$stmtGetExisting->execute();
$stmtGetExisting->store_result();
$rows = $stmtGetExisting->num_rows;
if($rows == 0) {
$stmtInsertSong = $mysqli->prepare("INSERT INTO played SET date_played = ?, time_played = ?, artist = ?, title = ?");
$stmtInsertSong->bind_param("ssss", $date, $times[$i], $artists[$i], $titles[$i]);
$stmtInsertSong->execute();
}
}
我想使用cronjob運行此腳本以自動保留所有已播放歌曲的歷史記錄,因此該腳本將非常頻繁地執行。
在大多數情況下,它運行良好,但是如果日期從2015年2月23日更改為2015年2月24日,則將再次插入日期更改之前播放的歌曲,但帶有新日期。
確保不再次插入在日期更改之前播放的歌曲的最佳方法是什么?
聽起來正在發生的事情是,您正在從服務器獲取歌曲的播放時間,但是使用當前日期作為播放日期。 在這種情況下,您可以按如下所示修改腳本:
$date = date("Y-m-d");
$time = date("H-i-s");
for($i = 0; $i < $songsCount; $i++) {
//since the time is was played would be later then the current time (only time, not
//datetime) you can check if the pulled time is greater then the current time
if($time < $times[$i]) continue;
$stmtGetExisting = $mysqli->prepare("SELECT id_played FROM played WHERE date_played = ? AND time_played = ? AND artist = ? AND title = ?");
$stmtGetExisting->bind_param("ssss", $date, $times[$i], $artists[$i], $titles[$i]);
$stmtGetExisting->execute();
$stmtGetExisting->store_result();
$rows = $stmtGetExisting->num_rows;
if($rows == 0) {
$stmtInsertSong = $mysqli->prepare("INSERT INTO played SET date_played = ?, time_played = ?, artist = ?, title = ?");
$stmtInsertSong->bind_param("ssss", $date, $times[$i], $artists[$i], $titles[$i]);
$stmtInsertSong->execute();
}
}
如果您只想存儲播放歌曲的第一個日期,則可以在artist + title列上放置一個索引,並使用“ ON DUPLICATE KEY” mysql條件來更新計數器。 這樣,您也可以刪除選擇查詢以檢查記錄是否存在,因為索引將為您檢查它。
您需要三個表才能正確處理這種要求。 第一個表僅包含藝術家屬性,第二個表僅包含歌曲屬性,第三個表僅包含執行屬性。 歌手表的主鍵應該是歌手名稱或您的外部提供商的鍵。 歌曲表的鍵必須是復合鍵,包括藝術家pk和歌曲名稱。 藝術家必須是外鍵。 執行鍵必須是復合鍵,使用歌曲pk加上執行日期時間。 進入計算機后,我將嘗試進行設計。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.