diff --git a/modules/articoli/ajax/search.php b/modules/articoli/ajax/search.php index 654c9d77e..5e2dd1148 100755 --- a/modules/articoli/ajax/search.php +++ b/modules/articoli/ajax/search.php @@ -45,7 +45,7 @@ $query .= ', '.$value." AS '".str_replace("'", "\'", $name)."'"; } -$query .= ' FROM `mg_articoli` LEFT JOIN `mg_articoli_lang` ON (`mg_articoli`.`id` = `mg_articoli_lang`.`id_record` AND `mg_articoli_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') LEFT JOIN `mg_prodotti` ON `mg_prodotti`.`id_articolo` = `mg_articoli`.`id` LEFT JOIN (SELECT CASE WHEN COUNT(`mg_articoli_barcode`.`barcode`) <= 2 THEN GROUP_CONCAT(`mg_articoli_barcode`.`barcode` SEPARATOR \',\') ELSE CONCAT((SELECT GROUP_CONCAT(`b1`.`barcode` SEPARATOR \',\') FROM (SELECT `barcode` FROM `mg_articoli_barcode` `b2` WHERE `b2`.`id_articolo` = `mg_articoli_barcode`.`id_articolo` ORDER BY `b2`.`barcode` ASC) `b1`)) END AS `lista`, `mg_articoli_barcode`.`id_articolo` FROM `mg_articoli` LEFT JOIN `mg_articoli_barcode` ON `mg_articoli_barcode`.`id_articolo` = `mg_articoli`.`id` GROUP BY `mg_articoli`.`id`) AS `barcode` ON `barcode`.`id_articolo` = `mg_articoli`.`id` WHERE deleted_at IS NULL AND (1=0 '; +$query .= ' FROM `mg_articoli` LEFT JOIN `mg_articoli_lang` ON (`mg_articoli`.`id` = `mg_articoli_lang`.`id_record` AND `mg_articoli_lang`.`id_lang` = '.prepare(Models\Locale::getDefault()->id).') LEFT JOIN `mg_prodotti` ON `mg_prodotti`.`id_articolo` = `mg_articoli`.`id` LEFT JOIN (SELECT CASE WHEN COUNT(`mg_articoli_barcode`.`barcode`) <= 2 THEN GROUP_CONCAT(`mg_articoli_barcode`.`barcode` SEPARATOR \',\') ELSE GROUP_CONCAT(`mg_articoli_barcode`.`barcode` ORDER BY `mg_articoli_barcode`.`barcode` ASC SEPARATOR \',\') END AS `lista`, `mg_articoli_barcode`.`id_articolo` FROM `mg_articoli` LEFT JOIN `mg_articoli_barcode` ON `mg_articoli_barcode`.`id_articolo` = `mg_articoli`.`id` GROUP BY `mg_articoli`.`id`) AS `barcode` ON `barcode`.`id_articolo` = `mg_articoli`.`id` WHERE deleted_at IS NULL AND (1=0 '; foreach ($fields as $name => $value) { $query .= ' OR '.$value.' LIKE '.prepare('%'.$term.'%'); diff --git a/update/2_11_1.sql b/update/2_11_1.sql new file mode 100644 index 000000000..89ae9a0e7 --- /dev/null +++ b/update/2_11_1.sql @@ -0,0 +1,15 @@ +-- Corregge la query di listato del modulo Articoli: il sottoquery dei barcode usava una +-- derived table correlata (SELECT ... FROM (SELECT ... FROM `mg_articoli_barcode` `b2` +-- WHERE `b2`.`id_articolo` = `mg_articoli_barcode`.`id_articolo` ...) `b1`), che referenzia il +-- `mg_articoli_barcode` della query esterna dall'interno di un sottoquery in FROM. MariaDB non +-- supporta le lateral/correlated derived table, quindi l'apertura di Magazzino > Articoli falliva +-- con errore 1054 "Unknown column 'mg_articoli_barcode.id_articolo' in 'WHERE'". +-- Il ramo ELSE viene sostituito da un GROUP_CONCAT ordinato: stesso risultato (i barcode +-- dell'articolo, ordinati) e valido sia su MariaDB sia su MySQL. +UPDATE `zz_modules` +SET `options` = REPLACE( + `options`, + 'CONCAT((SELECT GROUP_CONCAT(`b1`.`barcode` SEPARATOR ''
'') FROM (SELECT `barcode` FROM `mg_articoli_barcode` `b2` WHERE `b2`.`id_articolo` = `mg_articoli_barcode`.`id_articolo` ORDER BY `b2`.`barcode` ASC) `b1`))', + 'GROUP_CONCAT(`mg_articoli_barcode`.`barcode` ORDER BY `mg_articoli_barcode`.`barcode` ASC SEPARATOR ''
'')' +) +WHERE `name` = 'Articoli';