【发布时间】:2013-09-16 22:11:28
【问题描述】:
我有以下查询,该查询用于返回由条形码连接的机器数量。它们由线路的条形码连接。问题是我可能检查了几行机器,我需要检查机器的最后一行条形码;
例子:
在第 99201009 行检查了带有条形码 882102 的机器。
查询将返回带有此条码的机器的确切数量,但如果同一台机器被移动到条码为 22212302 的行,查询将为每行提供两行。我需要跳过第 99201009 行并获取 22212302;
这里是查询:
SELECT rountingCode, nameBg, count(scanlog.machinebarcode) AS count
FROM machines
LEFT JOIN scanlog ON scanlog.machinebarcode = machines.barcode
AND scanlog.linebarcode = $barcode
ORDER BY routingCode, nameBg GROUP BY routingCode, nameBG
我可能弄错了,所以这是来自 codeigniter 的原始查询。
$this->db->select
("rountingCode, nameBg, count(scanlog.machinebarcode) AS count")->
join("scanlog", "scanlog ON scanlog.machinebarcode = machines.barcode
AND scanlog.linebarcode = ".$barcode,"left")->
order_by("routingCode")->
group_by("routingCode, nameBg")->get("machines")->result();
ScanLog Schema
--------------
LogId
LineBarcode
ScanDate
Machines Schema
----------------
MachineId
FaNo
Barcode
Routingcode
NameBg
现在查询为每台机器返回不同的行。
如果我将 linebarcode 设置为 99201009,查询将为每台在 linebarcode = 99201009 上的 scanLog 中有记录的机器返回不同的行;
当在另一行上检查了某些机器条形码并在另一行上进行了较旧的检查时,就会出现问题。在这种情况下,查询会为一台机器返回许多行。
我每行需要一排机器。但正如我所说,如果在不同的行检查了机器并且没有删除以前的记录,则会出现问题并在每台机器上插入 1 个结果,我会得到更多。
让我们这样说:
机器 882102 先在 99201009 查了三遍。
这意味着我在这条线上有 3 台这样的机器
查询会给我count = 3;
目前一切正常。
但是,当带有条形码 882102 的两台机器移动到带有条形码 22212302 的另一行时,查询将给我count = 2、count = 1,这对我的程序来说是错误的。
我请求了第 22212302 行,所以我只能得到 count = 2。
【问题讨论】:
-
您的表格中是否有
date_scanned列或类似内容?使用表的架构和所需的结果集示例会更容易理解您想要什么。 -
是的,我有一个日期时间格式的 ScanDate 字段。我会在一分钟内用架构更新问题:)
-
更新了问题:)
-
您能否也添加一个您想要的结果集样本,以及您目前得到的结果。不知何故,我无法理解您想要实现的目标。
-
这对我来说有点难以解释,英语不是我的母语,对此感到抱歉,但我更新了问题并试图在底部进行解释。 :)
标签: php sql-server codeigniter join