AM::_get_warehouse: schnelleres Query
authorSven Schöling <s.schoeling@linet-services.de>
Mon, 5 Feb 2018 13:24:25 +0000 (14:24 +0100)
committerSven Schöling <s.schoeling@linet-services.de>
Mon, 5 Feb 2018 13:25:24 +0000 (14:25 +0100)
Das alte war extrem langsam für Installationen mit vielen Lagerplätzen

SL/AM.pm

index 7616edb..a8a6d3d 100644 (file)
--- a/SL/AM.pm
+++ b/SL/AM.pm
@@ -1305,12 +1305,14 @@ sub get_warehouse {
   map { $form->{$_} = $ref->{$_} } keys %{ $ref };
 
   $query = <<SQL;
-    SELECT b.*,
-      (   EXISTS(SELECT i.bin_id FROM inventory i WHERE i.bin_id = b.id LIMIT 1)
-       OR EXISTS(SELECT p.bin_id FROM parts     p WHERE p.bin_id = b.id LIMIT 1))
-      AS in_use
-    FROM bin b
-    WHERE b.warehouse_id = ?
+   SELECT b.*, use.in_use
+     FROM bin b
+     LEFT JOIN (
+       SELECT DISTINCT bin_id, TRUE AS in_use FROM inventory
+       UNION
+       SELECT DISTINCT bin_id, TRUE AS in_use FROM parts
+     ) use ON use.bin_id = b.id
+     WHERE b.warehouse_id = ?;
 SQL
 
   $form->{BINS} = selectall_hashref_query($form, $dbh, $query, conv_i($form->{id}));