php - 从数据库中获取唯一和未使用的项目

标签 php mysql sql

我有一个 (MySQL) 数据库表,其中包含公司租赁或销售的零件的历史记录。该表可能包含以下数据:

表:库存

id|type|serial
--------------
 1|recv| 1234
 2|recv| 2345
 3|recv| 3456
 4|leas| 2345
 5|sold| 1234
 6|ret | 2345

在上面的示例中,我们收到(存入)了序列号为 1234、2345、3456 的三件库存元素。元素 2345 被租出然后归还,而元素 1234 被售出。我需要的是能够查看当前有哪些元素可供出租或出售。

在这个例子中,我应该从 SQL 查询返回 2345 和 3456,因为 3456 从未被触及,2345 被租用,但返回(将其放回库存中)。我不确定我是否需要在我的 SQL 查询中使用“DISTINCT”还是什么。

更新:抱歉,我对数据库布局的了解有误。这是实际设置:

表:inventory_history

id|date|action
--------------
 1|....| recv
 2|....| leas
 3|....| sold
 4|....| ret

表:inventory_serials

id|fk|serial
--------------
 1| 1| 1234
 2| 1| 2345
 3| 1| 3456
 4| 2| 2345
 5| 3| 1234
 6| 4| 2345

设置表格,以便可以有一个历史列表(例如接收/库存),多个序列号被分配给该一个实例。因此,在此示例中,项目 1234、2345、3456 与接收/库存历史相关联(inventory_history 中的第 1 行)。项目 2345 (inventory_serials) 与第 2 行 (inventory_history) 等相关。

最佳答案

以下查询为每个项目选择最新的 id,然后检查该 id 记录是否有 recvleasret 类型,表示该项目的可用性。

SELECT
inventory.*
FROM inventory
INNER JOIN
(SELECT serial, max(id) id
FROM inventory
GROUP BY serial) max_id
ON inventory.id = max_id.id
WHERE type in ('recv', 'leas', 'ret');

编辑:

基于修改后的表结构,可以使用如下查询:

SELECT
iss.*
FROM inventory_serials iss
INNER JOIN
(SELECT serial, max(id) id
FROM inventory_serials
GROUP BY serial) max_id
ON iss.id = max_id.id
INNER JOIN inventory_history ih
ON iss.fk = ih.id
WHERE ih.action in ('recv', 'leas', 'ret');

这是 SQL Fiddle .

关于php - 从数据库中获取唯一和未使用的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23137166/

相关文章:

SQL - 比较两个表与减号 - 包含/排除临时字段

php - 在 ubuntu 14.04 PHP 版本 5.5.9-1ubuntu4.6(64 位服务器)上安装 PDFlib 时出现问题

javascript - jQuery getJSON 不工作

MySQL基于单表中具有多个GROUP BY的两列进行多重计数

sql - 便宜地缩放 : MySQL and MS SQL

c# - 如何在 C# 中创建存储过程,然后将其*保存*到 SQL Server?

sql - 使用 SELECT UNION 并从一张表中返回两列的输出

php - 使用php脚本在服务器上设置时间

php - 如何从 Phar 文件中访问外部文件?

php - 如何通过javascript函数调用codeigniter函数