Arka plan:
Ben konsoldan PHP komut dosyası kullanarak bir DB (netflix katalog) içine 330 meg xml dosyası ayrıştırma duyuyorum.
Başarıyla yaklaşık 1.500 başlıkları ekleyebilirsiniz her 3 saniyede until i aktörler, tür ve biçimleri eklemek için mantığı addd. Bunlar ilişkisel tablo ile bağlantılı ayrı tablolar vardır.
right now I have to run many, many queries for each title, bu sırayla (i eski başlıkları, türler, vb ortadan kaldırmak için, her şeyden önce tablo kesecek)
- 'başlıkları' yeni başlık eklemek ve insert id yakalama
- aktör exising için aktör tablosunu kontrol edin
- if present, get id, if not insert actor and get insert id
- insert title id and actor id into associative table
(2-4 adımlar çok türler için tekrarlanır)
Bu yaklaşık 10 3 saniyede benim hız don düşer. ~ 250,00 başlık eklemek için eternitty alacağını.
so how would I combine the 4 queries into a single query, without adding duplicate actors or genres
Amacım sadece bir veri dosyası içine tüm sorguları yazmak, ve bir toplu ekleme yapmaktır.
Ben bir veri dosyası içine tüm ilişkisel sorguları yazarak başladı, ama o performans için çok yapmadım.
Ben etitle inci ekleme ve kimliği kaydederek başlayın
function insertTitle($nfid, $title, $year){
$query="INSERT INTO ".$this->titles_table." (nf_id, title, year ) VALUES ('$nfid','$title','$year')";
mysql_query($query);
$this->updatedTitleCount++;
return mysql_insert_id();
}
o zaman dernek oluşturmak için her aktörün ismi ile birlikte kullanılır
function linkActor($değer, $title_id){
//check if we already know değer
$query="SELECT * FROM ".$this->persons_table." WHERE person = '$değer' LIMIT 0,1";
//echo "<br>".$query."<br>";
$result=mysql_query($query);
if($result && mysql_num_rows($result) != 0){
while ($row = mysql_fetch_assoc($result)) {
$değer_id=$row['id'];
}
}else{
//no değer known, add to persons table
$query="INSERT INTO ".$this->persons_table." (person) VALUES ('$değer')";
mysql_query($query);
$değer_id=mysql_insert_id();
}
//echo "linking title:".$title_id." with rel:".$değer_id;
$query = " INSERT INTO ".$this->title_persons_table." (title_id,person_id) VALUE ('$title_id','$değer_id');";
//mysql_query($query);
//write query to data file to be read in bulk style
fwrite($this->fh, $query);
}