2010-06-14 39 views
5

我正在嘗試創建一個簡單的庫存請求系統。用戶可以輸入將查詢庫存數據庫的多個SKU。關聯多個MySQL查詢w/PHP?

我的問題是我試圖做的是將這些多個查詢關聯到一個列表類型。此列表稍後可以檢索幷包含同時提交的所有查詢。當列表被填充時,它可以被刪除。

這可能嗎?我只是希望指出正確的方向。

感謝

+0

你想要什麼樣的列表?你想將它存儲在數據庫或其他列表中? – 1s2a3n4j5e6e7v 2010-06-14 12:54:08

+0

將它存儲在同一個數據庫中會很好。 – cds5059 2010-06-14 12:57:33

回答

0

做一個表是這樣的:

ListNumber SKU 
1   5423 
1   5432 
1   6542 
1   6543 
2   5411 
3   6542 
3   5411 
3   5423 

然後,只需做檢索SKU爲列表1:

SELECT SKU FROM Table WHERE ListNumber=1; 
+0

我如何將這些SKU同時添加到列表中,以便它們都包含相同的ListNumber? – cds5059 2010-06-14 13:12:57

+0

使用sessionId作爲關鍵字可能更明智(這也提供了通過會話收割者進行清理) - 但要注意多個窗口對同一會話的影響。 – symcbean 2010-06-14 13:20:03

0

你可以使用(listNo,SKU,時間戳)表結構。時間戳將幫助您分析您的庫存被查詢的時間和方式。

+0

我喜歡Timestamp的想法。我如何在同一時間添加所有查詢,以便它們包含相同的時間戳?同時查詢多個SKU – cds5059 2010-06-14 13:13:44

+0

是的。爲什麼你想限制在「同一時間」。只需給now()函數。它會得到插入的時間戳。 – 1s2a3n4j5e6e7v 2010-06-14 13:53:08

+0

你會在會話中存儲listNo,所以你總是添加到正確的列表中。或者如果用戶有多個打開的會話,請使用一些其他唯一的ID,如IP地址或用戶/登錄名等 – Steve 2010-06-26 20:06:57

1

如果我正確地理解了這個問題,您正在查找某個查詢來檢索數據,當有人在表中搜索多個SKU時。那是對的嗎?如果是,請參閱下面的查詢。

SELECT some_data FROM some_table WHERE sku IN ('SSDF3','GHG56',...'HG09'); 
0

我可以在這裏看到你想要的東西。你想確保你有多個插入,並以某種方式確保它們具有某種與每個事務相關的一致ID。如果您採用時間戳方式,則不能保證它們全都會在同一秒插入。

要在MySQL中同時插入行是非常困難的,但我確實有一個可能有效的建議。我在想你應該開始一個交易,找到下一個最高的ID號碼,然後插入所有這些行。

  1. $transRes = mysql_query("START TRANSACTION");
  2. $nextListRes = mysql_query("SELECT max(listNumber) FROM InventoryRequests");
  3. $nextListRes抓取的結果,並使用該增加的值加1。
  4. 運行INSERT查詢的成品保持單元。
  5. $commitRes = mysql_query("COMMIT");

你要確保這是一種交易,而不是兩個單獨的查詢,因爲可能存在競爭條件,其中的正在運行的PHP代碼可能SELECT在同一時間(一個非常糟糕的事情兩個實例! )。

此外,我正在考慮子查詢的方式來做到這一點,但這會使得每個INSERT語句每次執行時都會有不同的MAX(listNumber),這意味着它們將不會與您具有相同的ID想。您可能想要查看INSERT的準備好的語句,如果您還需要它們更快一點的話:)

0

不確定我是否理解,但聽起來像您正試圖構建購物車或一個基本的訂單履行系統?

如果是這種情況,可以創建另一個存儲SKU的「訂單」和逗號分隔的列表(類似於Sjoerd的答案,但您不需要擔心確定列表ID)之後被注入一個IN()子句(按照gsharma)。 「訂單」可能隨後被刪除,或標記爲不活動或類似的東西。

1

您需要將該表與數據庫中的另一個表關聯,其中它將成爲一個多對多表,它將基於與SKU匹配的外鍵的庫存表和類型列表連接起來。

YOU CAN QUERY THE FOLLOWING 
SELECT inventory.* FROM inventory LEFT JOIN InvLinkedList ON InvLinkedList.SKU = Inventory.SKU WHERE InvLinkedList.typeID = 2 

你需要有庫存表中的所有項目,通過ID和類型的列InventoryType表和多對多的連接表InvLinkedList有兩個索引列(SKU和TYPE ID)。您需要定義這些表的關係,其中ON DELETE將在類型列表中顯示CASCADE。因此,當您刪除某個類型時,它將刪除InvLinkedList中具有typeID的行,但不會刪除庫存中的項目。當您使用SKU移除項目時,會發生相反的情況。

我希望這將是解決方案。至於多種類型,您可以創建一個PHP函數以返回上面提到的具有定義類型的查詢。