2013-02-28 39 views
0

我需要修改許多SQL語句以包含遞增的數字以跟蹤「段落」列中的每個單詞。對不起,但我的PHP技能是有限的。在閱讀文件後,我正在考慮一個foreach循環,但不能想出任何事實來修改這些行以包含每個單詞的每個值。如何修改SQL文件的每一行

當前SQL:

INSERT INTO `book` VALUES(1, 1, 1, 'These are the words in a sentence in a chapter in a book.'); 
INSERT INTO `book` VALUES(1, 1, 2, 'These are the words in the second sentence in a chapter in a book.'); 
INSERT INTO `book` VALUES(1, 1, 3, 'These are the words in the third sentence in a chapter in a book.'); 
...and so on. 

的當前值是 '書',「章, 'paragraph_number', '款'。

目標:

INSERT INTO `book` VALUES(1, 1, 1, 1,'These'); 
INSERT INTO `book` VALUES(1, 1, 1, 2,'are'); 
INSERT INTO `book` VALUES(1, 1, 1, 3,'the'); 
INSERT INTO `book` VALUES(1, 1, 1, 4,'words'); 

的-NEW-值是 '書',「章, 'paragraph_number', '款', 'word_number'。

我已經有書,章節和段落號。

例如:

INSERT INTO `book` VALUES(1, 5, 16, 'This is a sentence from book 1, chapter 5, paragraph 16.'); 

將轉換爲:

INSERT INTO `book` VALUES(1, 5, 16, 1,'This'); 
INSERT INTO `book` VALUES(1, 5, 16, 2,'is'); 
INSERT INTO `book` VALUES(1, 5, 16, 3,'a'); 
INSERT INTO `book` VALUES(1, 5, 16, 4,'sentence'); 
INSERT INTO `book` VALUES(1, 5, 16, 5,'from'); 
INSERT INTO `book` VALUES(1, 5, 16, 6,'book'); 
INSERT INTO `book` VALUES(1, 5, 16, 7,'1,'); 
INSERT INTO `book` VALUES(1, 5, 16, 8,'chapter'); 
INSERT INTO `book` VALUES(1, 5, 16, 9,'5,'); 
INSERT INTO `book` VALUES(1, 5, 16, 10,'paragraph'); 
INSERT INTO `book` VALUES(1, 5, 16, 11,'16.'); 

任何援助將不勝感激...謝謝!

編輯:下面是代碼的工作....基於Akam的答案...我改變了SQL語句。添加了[SEP]將文本與其他數據分開,這些數據允許我使用文本。另外,添加$ x來增加字數。

SQL:

1, 1, 1,[SEP]These are the words in sentence 1 in chapter 1 in a book. 
1, 1, 2,[SEP]These are the words in sentence 2 in chapter 1 in a book. 

PHP:

$lines = file('my-book.sql'); 
$query = "INSERT INTO `book` VALUES \n"; 

foreach ($lines as $line) 
{ 
    $part = preg_split("/\[SEP\]/", $line); 
    $part[1] = preg_replace('~[\r\n]+~', '', $part[1]); 
    $words = preg_split("/\s+/", $part[1]); 

    $x = 1; 
    foreach($words as $word) 
    { 
     $values[] = "(".$part[0]." ".$x.", '".$word."')"; 
     $x++; 
    } 

} 

$new_lines = implode(",\n", $values); 
$new_lines = $query.$new_lines.";"; 
echo $new_lines; 

回答

0
<?php 
$text = 'This is a sentence from book 1, chapter 5, paragraph 16.'; 
$words = preg_split("/\s+/", $text); 
$query = "INSERT INTO `book` VALUES \n"; 
foreach($words as $word){ 
$values[] = "(1, 5, 16, 1,'$word')"; 
} 
$finalquery = $query.implode(",\n", $values); 
echo $finalquery.";"; 
?> 

輸出:

INSERT INTO `book` VALUES 
(1, 5, 16, 1,'This'), 
(1, 5, 16, 1,'is'), 
(1, 5, 16, 1,'a'), 
(1, 5, 16, 1,'sentence'), 
(1, 5, 16, 1,'from'), 
(1, 5, 16, 1,'book'), 
(1, 5, 16, 1,'1,'), 
(1, 5, 16, 1,'chapter'), 
(1, 5, 16, 1,'5,'), 
(1, 5, 16, 1,'paragraph'), 
(1, 5, 16, 1,'16.'); 
+0

感謝阿卡姆!我設法使用您的代碼作爲基礎來完成我所需要的工作。請參閱OP中的編輯。 – Mark 2013-03-01 13:59:33