バーコードで結合されたマシンの数を返すために使用される次のクエリがあります。それらは、ラインのバーコードによって結合されます。問題は、マシンが複数の行でチェックされる可能性があり、マシンがチェックされた最後の行のバーコードが必要なことです。
例: バーコード 882102 のマシンがライン 99201009 でチェックされました。クエリは、ライン上でこのバーコードを持つマシンの正確な数を返しますが、同じマシンがバーコード 22212302 のラインに移動した場合、クエリは次の 2 つの行を返します。それぞれの行。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 台のマシンに対して多くの行を返します。マシンごとに 1 行が必要です。しかし、私が言ったように、マシンが別の行でチェックされ、前のレコードが削除されていない場合、問題が発生し、マシンごとに 1 つの結果が表示され、より多くの結果が得られます。
このように言いましょう:
マシン 882102 は、最初に 99201009 で 3 回チェックされました。
つまり、この行にこれらのマシンが 3 台あるという
ことですcount
。3
;
今のところすべて問題ありません。
しかし、バーコード 882102 を持つ 2 台のマシンがバーコード 22212302 を持つ別の行に移動すると、クエリはcount
= 2
, count
=を返しますが1
、これは私のプログラムにとっては間違っています。
22212302 行をリクエストしたので、count
=のみを取得する必要があり2
ます。