将多个MySQL查询与/ PHP相关联?

时间:2010-06-14 12:50:06

标签: php mysql

我正在尝试创建一个简单的库存请求系统。用户可以输入将查询库存数据库的多个SKU。

我的问题是我要做的是将这些多个查询关联到一种列表中。稍后可以检索此列表并包含同时提交的所有查询。填写完列表后,可以将其删除。

这可能吗?我只是想指出正确的方向。

由于

6 个答案:

答案 0 :(得分:1)

如果我正确理解了问题,那么当有人在表中搜索多个SKU时,您正在寻找查询来检索数据。那是对的吗?如果是,请参阅下面的查询。

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

答案 1 :(得分: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表以及将TABLE InvLinkedList与两个索引列(SKU和TYPE ID)连接的MANY TO MANY。您将需要定义这些表的关系,其中ON DELETE,它将在类型列表上CASCADE。因此,当您删除类型时,它将删除InvLinkedList中具有typeID的行,但不会删除Inventory中的项目。使用SKU删除项目时会发生相反的情况。

我希望这将成为解决方案。对于多种类型,您可以创建一个PHP函数来返回上面提到的具有已定义类型的查询。

答案 2 :(得分:0)

制作一个这样的表:

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

然后通过执行以下操作简单地检索列表1的SKU:

SELECT SKU FROM Table WHERE ListNumber=1;

答案 3 :(得分:0)

您可以使用(listNo,SKU,TimeStamp)表结构。时间戳将帮助您分析查询和查询库存的方式和时间。

答案 4 :(得分:0)

我可以在这看到你想要的东西。您希望确保您有多个插入,并以某种方式确保它们具有与每个事务关联的某种一致ID。如果采用时间戳方法,则无法保证它们都将在同一秒内插入。

在MySQL中同时插入行是非常困难的,但我确实有一个可行的建议。我想你应该开始一个事务,找到下一个最高的ID号,然后插入所有这些行。

  1. $transRes = mysql_query("START TRANSACTION");
  2. $nextListRes = mysql_query("SELECT max(listNumber) FROM InventoryRequests");
  3. $nextListRes获取结果并添加1。
  4. 使用此递增值运行INSERT对SKU的查询。
  5. $commitRes = mysql_query("COMMIT");
  6. 您希望确保这是一个事务而不是两个单独的查询,因为竞争条件可能存在,其中您运行的PHP代码的两个实例可能同时SELECT(非常糟糕!)。 / p>

    另外,我正在考虑使用子查询的方法来实现它,但是这会使每个INSERT语句在每次执行时都有不同的MAX(listNumber),这意味着他们赢了“ t具有您想要的相同ID。您可能希望查看INSERT的预准备语句,如果您需要它们更快一点:)

答案 5 :(得分:0)

不确定我是否理解,但听起来您正在尝试构建购物车或基本订单履行系统?

如果是这种情况,或许可以创建另一个表来存储“订单”和逗号分隔列表(类似于Sjoerd的答案,但您不必担心预先确定列表ID)SKU可以在以后使用注入IN()子句(根据gsharma)。随后可以删除“订单”,或将其标记为非活动或类似的东西。