Zen Follower
- Join Date:
- Apr 2008
- Location:
- Qld, Australia
- Posts:
- 429
- Plugin Contributions:
- 0
V210 V222 Advance search FATAL MySQL error 1055 field not in GROUP BY
ZC v222 ZC v210
PHP 8.4.16; MySQL 11.8.5-MariaDB-ubu2404; Template: Bootstrap4 3.7.10 (all templates)
Page: Advanced Search (Search)
URL /search_result?keyword=Steering%20head%20bearings&search_in_description=1&categories_id=156&inc_subcat=1&pto=200,
Logfile error (and displayed on screen) is in code block below.
Just place any value in the "Price To" field.
Problem comes from includes/classes/class.search.php.
A quick bodge around line 246 to store the select fields
$select_new_str = $select_column_list .
" p.products_sort_order, m.manufacturers_id, p.products_id, pd.products_name,
p.products_price, p.products_tax_class_id, p.products_price_sorter,
p.products_qty_box_status, p.master_categories_id, p.product_is_call ";
and a similar one around line 410 to replace $where_str .= " GROUP BY p.products_id, tr.tax_priority"; with ```
$where_str .= " GROUP BY " . $select_new_str . ", p.products_id, tr.tax_priority";
returns the correct results.
I have not tested it to see what else i tmay have broken
Logfile```
[21-May-2026 18:13:11 Australia/Brisbane] Request URI: /search_result?keyword=Steering%20head%20bearings&search_in_description=1&categories_id=156&inc_subcat=1&pto=200, IP address: 1.147.108.201, Language id 1
#0 [internal function]: zen_debug_error_handler()
#1 /includes/classes/db/mysql/query_factory.php(757): trigger_error()
#2 /includes/classes/db/mysql/query_factory.php(701): queryFactory->show_error()
#3 /includes/classes/db/mysql/query_factory.php(314): queryFactory->set_error()
#4 /includes/modules/xx_bootstrap_xx/product_listing.php(137): queryFactory->Execute()
#5 /includes/templates/xx_bootstrap_xx/templates/tpl_modules_product_listing.php(12): require('...')
#6 /includes/templates/xx_bootstrap_xx/templates/tpl_search_result_default.php(71): require('...')
#7 /includes/templates/xx_bootstrap_xx/common/tpl_main_page.php(233): require('...')
#8 /index.php(109): require('...')
--> PHP Fatal error: FATAL MySQL error 1055: 'zcXXX_prod.p.products_model' isn't in GROUP BY :: SELECT DISTINCT p.products_model, p.products_image, p.products_quantity, p.products_sort_order, m.manufacturers_id, p.products_id, pd.products_name, p.products_price, p.products_tax_class_id, p.products_price_sorter, p.products_qty_box_status, p.master_categories_id, p.product_is_call , SUM(tr.tax_rate) AS tax_rate FROM (products p LEFT JOIN manufacturers m USING(manufacturers_id), products_description pd, categories c, products_to_categories p2c ) LEFT JOIN meta_tags_products_description mtpd ON (mtpd.products_id= p2c.products_id AND mtpd.language_id = 1) LEFT JOIN tax_rates tr ON p.products_tax_class_id = tr.tax_class_id LEFT JOIN zones_to_geo_zones gz ON tr.tax_zone_id = gz.geo_zone_id AND (gz.zone_country_id IS null OR gz.zone_country_id = 0 OR gz.zone_country_id = 13) AND (gz.zone_id IS null OR gz.zone_id = 0 OR gz.zone_id = 185) WHERE (p.products_status = 1 AND p.products_id = pd.products_id AND pd.language_id = 1 AND p.products_id = p2c.products_id AND p2c.categories_id = c.categories_id AND p2c.products_id = p.products_id AND p2c.products_id = pd.products_id AND (p2c.categories_id = 156) AND ( ( pd.products_name LIKE '%steering%' OR p.products_model LIKE '%steering%' OR m.manufacturers_name LIKE '%steering%' OR mtpd.metatags_keywords LIKE '%steering%' OR mtpd.metatags_description LIKE '%steering%' OR pd.products_description LIKE '%steering%') AND ( pd.products_name LIKE '%head%' OR p.products_model LIKE '%head%' OR m.manufacturers_name LIKE '%head%' OR mtpd.metatags_keywords LIKE '%head%' OR mtpd.metatags_description LIKE '%head%' OR pd.products_description LIKE '%head%') AND ( pd.products_name LIKE '%bearings%' OR p.products_model LIKE '%bearings%' OR m.manufacturers_name LIKE '%bearings%' OR mtpd.metatags_keywords LIKE '%bearings%' OR mtpd.metatags_description LIKE '%bearings%' OR pd.products_description LIKE '%bearings%') )) AND (p.products_price_sorter * IF(gz.geo_zone_id IS NULL, 1, 1 + (tr.tax_rate / 100)) <= 200) GROUP BY p.products_id, tr.tax_priority ORDER BY p.products_sort_order, pd.products_name LIMIT 8 ==> (as called by) /includes/modules/xx_bootstrap_xx/product_listing.php on line 137 <== in /includes/classes/db/mysql/query_factory.php on line 757.
OldNGrey
ZC222 PHP 8.4.16
MySQL 11.8.5-MariaDB