最後にこれを行う方法を見つけました、そしてそれは複数のクエリで行われなければなりません。
テーブルは、新しいYouTubeビデオ参照をvidsテーブルに入力すると、自動インクリメントvid_idを取得するように設定されています。ジャンクションテーブルlist_vid_juncはMyISAMであり、 list_id、vid_id、sortの3つの列があります。主キーはlist_idとsortで構成されています。sortはautoincrementに設定されています。これにより、リスト内の同じビデオの複数のエントリが可能になり、並べ替えの自動インクリメントで並べ替えることができます。
MyISAMテーブルでは、主キーインデックスがこのように分割されているため、mySqlは、すべての並べ替えを一意の番号にするのではなく、作成される新しいリストごとに1から並べ替えの自動インクリメントを開始することに注意してください。http://dev.mysql.com/を参照してください。 doc / refman / 5.5 / en / example-auto-increment.html#id583323。リスト1には1、2、3のソートIDを含めることができ、リスト2には1、2、3のソートIDを含めることもできます。番号のペアは、個々の番号ではなく一意です。
class DbService {
var $username = "user";
var $password = "password";
var $server = "localhost";
var $port = "3306";
var $databasename = "database";
var $connection;
public function __construct() {
$this->connection = mysqli_connect(
$this->server,
$this->username,
$this->password,
$this->databasename,
$this->port
);
$this->throwExceptionOnError($this->connection);
}
// returns array of (vidID, sort); adds duplicate vids to list if run 2+ times
public function addToPlaylist($ytRef, $listID) {
$stmt = mysqli_prepare($this->connection, "INSERT IGNORE INTO vids(yt_ref) VALUES (?)");
mysqli_bind_param($stmt, 's', $ytRef);
mysqli_stmt_execute($stmt);
$vidID = mysqli_stmt_insert_id($stmt); // 0 if video already exists
mysqli_stmt_free_result($stmt);
if ($vidID == 0) {
$stmt = mysqli_prepare($this->connection, "SELECT vid_id FROM vids WHERE yt_ref = ? LIMIT 1");
mysqli_bind_param($stmt, 's', $ytRef);
mysqli_stmt_execute($stmt);
mysqli_stmt_bind_result($stmt, $vidID);
mysqli_stmt_fetch($stmt);
mysqli_stmt_free_result($stmt);
}
$stmt = mysqli_prepare($this->connection, "INSERT IGNORE INTO fr_list_vid_junc(vid_id, list_id) VALUES(?, ?)");
mysqli_stmt_bind_param($stmt, 'ii', $vidID, $listID);
mysqli_stmt_execute($stmt);
mysqli_stmt_free_result($stmt);
mysqli_close($this->connection);
$arr = array($vidID, mysqli_stmt_insert_id($stmt));
return $arr;
}
}