我正在嘗試創建一個簡單的庫存請求系統。用戶可以輸入將查詢庫存數據庫的多個SKU。關聯多個MySQL查詢w/PHP?
我的問題是我試圖做的是將這些多個查詢關聯到一個列表類型。此列表稍後可以檢索幷包含同時提交的所有查詢。當列表被填充時,它可以被刪除。
這可能嗎?我只是希望指出正確的方向。
感謝
我正在嘗試創建一個簡單的庫存請求系統。用戶可以輸入將查詢庫存數據庫的多個SKU。關聯多個MySQL查詢w/PHP?
我的問題是我試圖做的是將這些多個查詢關聯到一個列表類型。此列表稍後可以檢索幷包含同時提交的所有查詢。當列表被填充時,它可以被刪除。
這可能嗎?我只是希望指出正確的方向。
感謝
做一個表是這樣的:
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;
你可以使用(listNo,SKU,時間戳)表結構。時間戳將幫助您分析您的庫存被查詢的時間和方式。
我喜歡Timestamp的想法。我如何在同一時間添加所有查詢,以便它們包含相同的時間戳?同時查詢多個SKU – cds5059 2010-06-14 13:13:44
是的。爲什麼你想限制在「同一時間」。只需給now()函數。它會得到插入的時間戳。 – 1s2a3n4j5e6e7v 2010-06-14 13:53:08
你會在會話中存儲listNo,所以你總是添加到正確的列表中。或者如果用戶有多個打開的會話,請使用一些其他唯一的ID,如IP地址或用戶/登錄名等 – Steve 2010-06-26 20:06:57
如果我正確地理解了這個問題,您正在查找某個查詢來檢索數據,當有人在表中搜索多個SKU時。那是對的嗎?如果是,請參閱下面的查詢。
SELECT some_data FROM some_table WHERE sku IN ('SSDF3','GHG56',...'HG09');
我可以在這裏看到你想要的東西。你想確保你有多個插入,並以某種方式確保它們具有某種與每個事務相關的一致ID。如果您採用時間戳方式,則不能保證它們全都會在同一秒插入。
要在MySQL中同時插入行是非常困難的,但我確實有一個可能有效的建議。我在想你應該開始一個交易,找到下一個最高的ID號碼,然後插入所有這些行。
$transRes = mysql_query("START TRANSACTION");
$nextListRes = mysql_query("SELECT max(listNumber) FROM InventoryRequests");
$nextListRes
抓取的結果,並使用該增加的值加1。INSERT
查詢的成品保持單元。$commitRes = mysql_query("COMMIT");
你要確保這是一種交易,而不是兩個單獨的查詢,因爲可能存在競爭條件,其中的正在運行的PHP代碼可能SELECT
在同一時間(一個非常糟糕的事情兩個實例! )。
此外,我正在考慮子查詢的方式來做到這一點,但這會使得每個INSERT
語句每次執行時都會有不同的MAX(listNumber)
,這意味着它們將不會與您具有相同的ID想。您可能想要查看INSERT
的準備好的語句,如果您還需要它們更快一點的話:)
不確定我是否理解,但聽起來像您正試圖構建購物車或一個基本的訂單履行系統?
如果是這種情況,可以創建另一個存儲SKU的「訂單」和逗號分隔的列表(類似於Sjoerd的答案,但您不需要擔心確定列表ID)之後被注入一個IN()子句(按照gsharma)。 「訂單」可能隨後被刪除,或標記爲不活動或類似的東西。
您需要將該表與數據庫中的另一個表關聯,其中它將成爲一個多對多表,它將基於與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函數以返回上面提到的具有定義類型的查詢。
你想要什麼樣的列表?你想將它存儲在數據庫或其他列表中? – 1s2a3n4j5e6e7v 2010-06-14 12:54:08
將它存儲在同一個數據庫中會很好。 – cds5059 2010-06-14 12:57:33