2012-01-16 126 views
0

我正在構建一個相當簡單的網站來跟蹤一些工作銷售情況。它涉及一個mysql數據庫,每個條目有多個表。大多數情況下,這種關係是被割斷和乾燥的。不過,我有一個評論表,它將存儲多個評論以供同一個銷售。我在註釋表中有一個外鍵與主銷售表的ID綁定。我在總表和銷售表之間有一個類似的安排,因爲它存儲了同一個銷售ID的多個總額。將這些插入數據庫的最佳方法是什麼?目前,我正在插入註釋並獲取該行的ID,然後插入總量並獲取ID,然後使用註釋ID和總體ID將插入插入到銷售表中。有沒有更有效的方法,而不是做5個查詢?PHP MYSQL數據庫結構,一個條目的多個查詢

- 編輯:這是當前的代碼。我對此很新,所以我不得不查找程序來查看你的意思。這似乎基本上是我在做什麼,而是爲它創建一種方法,一旦我找出最有效的方法,我將會這樣做。

//Prepare the Queries 
//Insert Gross Amounts Query 
$grossQ = "INSERT INTO gross (commGross, storeGross, manGross, fiGross, flatGross) VALUES ('$commGross', '$storeGross', '$manGross', '$fiGross')"; 

//Insert Comments Query 
$commentsQ = "INSERT INTO comments (comment, dealcomment, grosscomment) VALUES ('$otherComments', '$dealComments', $grossComments')"; 

//Insert Deal Query 
$q = "INSERT INTO sales (make, model, location, vehtype, saletype, manager, county, flat, unitcount, armoramount, controlnumber, salesman, stock) VALUES ('$make', '$model', '$location', '$vehType', '$saleType', '$managerName', '$county', '$flat', '$unitCount', '$armorAmount', '$controlNumber', '$salesmanName1', '$stock')"; 

//Make database connection 
$db = new db('palm_sales'); 

//Execute gross query and get the id of the row 
$db->execute($grossQ); 
$grossID = $db->getLastID(); 

//Execute comments query and get the id of the row 
$db->execute($commentsQ); 
$commentsID = $db->getLastID(); 

//Build Main Query 
$q = "INSERT INTO sales (make, model, location, vehtype, saletype, manager, gross, comments, county, flat, unitcount, armoramount, controlnumber, salesman, stock) VALUES ('$make', '$model', '$location', '$vehType', '$saleType', '$managerName', '$grossID', '$commentsID', '$county', '$flat', '$unitCount', '$armorAmount', '$controlNumber', '$salesmanName1', '$stock')"; 

//Execute Main Query 
$db->execute($q); 
if(mysql_affected_rows() > 0) 
{ 
    echo "Success!";  
} 
else echo "Error: ".mysql_error(); 
+1

你能寫一個存儲過程嗎? –

+0

你可以發佈你的代碼嗎?最有效的方法可能是將您的插入在預先觸發器和觸發器之間進行拆分 –

+0

您應該編寫一個存儲過程,或者直接使用sql事務來確保一切正常或nok。 –

回答

1

這聽起來像你只是在一瞬間執行3個查詢 - mysql_insert_id()不執行新的查詢,它給你關於剛剛執行嵌入信息。

目前尚不清楚爲什麼插入評論或毛病時需要插入銷售表。我可以想象你有這樣的事情:

TABLE sales  PK id 
TABLE comments PK id FK sales_id 
TABLE gross  PK id FK sales_id 

當你得到一個新的銷售,你插入sales表。要添加新評論或重要內容,請使用銷售ID的外鍵插入該表。哪部分不起作用?

+0

所有信息都以一種形式收集。我看到你在說什麼。我目前在銷售表中存儲了FK comments_id和FK gross_id,但這不是必需的。我應該先插入主要銷售,然後獲得評論和總額的ID。 – Stewie