Mysql&;需要php指南:)
我正在学习PHP和Mysql,并提出了一个小示例项目。在这个项目中,我可以注册一张发票,我可以向其中添加一些项目,最后但并非最不重要的是,我可以将这些项目移动到正确的商店的存储中。就我现在所见,当我想将Mysql&;需要php指南:),php,mysql,Php,Mysql,我正在学习PHP和Mysql,并提出了一个小示例项目。在这个项目中,我可以注册一张发票,我可以向其中添加一些项目,最后但并非最不重要的是,我可以将这些项目移动到正确的商店的存储中。就我现在所见,当我想将发票\u项目移动到存储表时,我必须对每个项目进行查询,以检查该项目是否存在于该存储中,然后更新该行的数量记录或插入新行 在我看来,这不是一个好的解决办法。难道我没有办法用一个mysql查询来解决这个问题吗?它是否是这个任务的合适的数据库基础设施?如果不是,我如何改进它 非常感谢您的建议 发票 I
发票\u项目
移动到存储
表时,我必须对每个项目进行查询,以检查该项目是否存在于该存储中,然后更新该行的数量记录或插入新行
在我看来,这不是一个好的解决办法。难道我没有办法用一个mysql查询来解决这个问题吗?它是否是这个任务的合适的数据库基础设施?如果不是,我如何改进它
非常感谢您的建议
发票
- ID(主键)
- 发票号码
- 商店标识
- ID(主键)
- 发票号
- 项目
- 数量
- ID(主键)
- 项目编号
- 数量
- 商店标识
- ID(主键)
- 名字
- ID(主键)
- 名字
主键
添加到IDs中,但也可以使用UNIQUE
。如果数据库中已经存在数据,这将导致更新查询失败。换句话说,通过设置一个列unique,数据库将为您执行exist检查,您不必在PHP中编写check-if-id-ready-exists-then-update-or-insert()函数
您也可以在您的ID上使用
自动增量
。这样,当您插入新项目时,ID会自动递增。只需在两个查询中执行此操作
只需在重复密钥更新时使用复合唯一密钥和
。
即可进行一个同时具有这两种功能的查询?@scragar感谢您的回答,我可以如何使用复合唯一密钥?您目前的操作情况如何?请包括代码
UPDATE
s
SET
s.quantity = s.quantity + item.quantity
FROM
Storage s
JOIN Invoice_item item ON s.item_id = item.item_id
WHERE
item.invoice_id = 5 -- invoice to put into storage
AND s.ID = 3 -- store to put the invoice items into
INSERT INTO
Storage (item_id, quantity, store_id)
SELECT
item.item_id
,item.quantity
,3 -- store to put the invoice items into
FROM
Invoice_item item
WHERE
item.invoice_id = 5
AND NOT EXISTS (
SELECT *
FROM Storage s
WHERE
s.store_id = 3
AND s.item_id = item.item_id
)