Skip to main content

Product filtering sql error

More
14 years 2 months ago - 14 years 2 months ago #57340 by Asty
My product has two characteristics, I use two dynamic checkbox filters for filtering by those characteristics.
When i chose two options in differnt filters i have an SQL error:
Code:
JDatabaseMySQLi::query: 1066 - Not unique table/alias: 'c' SQL=SELECT DISTINCT b.* FROM ai0zt_hikashop_product_category AS a LEFT JOIN ai0zt_hikashop_product AS b ON a.product_id=b.product_id LEFT JOIN ai0zt_hikashop_product AS c ON b.product_id=c.product_parent_id LEFT JOIN ai0zt_hikashop_variant AS choosebysize1 ON choosebysize1.variant_product_id=c.product_id LEFT JOIN ai0zt_hikashop_product AS c ON b.product_id=c.product_parent_id LEFT JOIN ai0zt_hikashop_variant AS choosebycolor2 ON choosebycolor2.variant_product_id=c.product_id WHERE b.product_published=1 AND b.product_type = 'main' AND a.category_id IN (32,33,36,38,39,40,41,31) AND (b.product_access = 'all' OR b.product_access LIKE '%,8,%') AND choosebysize1.variant_characteristic_id IN (7) AND choosebycolor2.variant_characteristic_id IN (4) ORDER BY b.product_created DESC LIMIT 0, 12

Is there need more info?
Last edit: 14 years 2 months ago by Asty.

Please Log in or Create an account to join the conversation.

More
14 years 2 months ago #57402 by nicolas
Hi,

Please change the line:
Code:
$on.=' LEFT JOIN '.hikashop_table('product').' AS c ON b.product_id=c.product_parent_id LEFT JOIN '.hikashop_table('variant').' AS '.$filter->filter_namekey.$i.' ON '.$filter->filter_namekey.$i.'.variant_product_id=c.product_id';


to:
Code:
static $done = false; if(!$done){ $done = true; $on.=' LEFT JOIN '.hikashop_table('product').' AS c ON b.product_id=c.product_parent_id'; } $on.=' LEFT JOIN '.hikashop_table('variant').' AS '.$filter->filter_namekey.$i.' ON '.$filter->filter_namekey.$i.'.variant_product_id=c.product_id';

in the file administrator/components/com_hikashop/classes/filter.php and that should fix the problem.
The following user(s) said Thank You: Asty

Please Log in or Create an account to join the conversation.

More
12 years 8 months ago - 12 years 8 months ago #139214 by jschroeder
Hi i Made the modification as suggest to have the product page sort by cheapest price first automatically as suggested in the link below.
www.hikashop.com/forum/4-how-to/57655-or...-cheapest-price.html

The problem is when i use this modification I get the below error when I select any characteristic checkbox in my filter setting,

SQL=SELECT DISTINCT b.* FROM hkta4_hikashop_product_category AS a LEFT JOIN hkta4_hikashop_product AS b ON a.product_id=b.product_id LEFT JOIN hkta4_hikashop_product AS c ON b.product_id=c.product_parent_id LEFT JOIN hkta4_hikashop_variant AS Mattress_Size2 ON Mattress_Size2.variant_product_id=c.product_id LEFT JOIN hkta4_hikashop_price AS c ON c.price_product_id=b.product_id WHERE b.product_published=1 AND b.product_type = 'main' AND a.category_id IN (21) AND (b.product_access = 'all' OR b.product_access LIKE '%,1,%') AND Mattress_Size2.variant_characteristic_id IN (6) AND c.product_quantity!=0 ORDER BY c.price_value ASC LIMIT 0, 12

I tried the solution you have posted above above because it seems like the same error, but instead when i implement the code you listed i get the following error:
Parse error: syntax error, unexpected T_CLASS, expecting T_FUNCTION in /xxx/xxxx/public_html/administrator/components/com_hikashop/classes/filter.php on line 1247

How can I fix this?...this is pretty urgent I have to have the site done by the end of the week and I need to be able to have to product listing page automatically list the product by cheapest price first and not get the above error when I filter a characteristic in the filter.

Thanks,

Josh
Last edit: 12 years 8 months ago by jschroeder.

Please Log in or Create an account to join the conversation.

More
12 years 8 months ago #139242 by nicolas
Hi,

The code on this current thread has no link to your issue.

I've updated the code on the other thread as that's the one that should be changed :
www.hikashop.com/forum/4-how-to/57655-or...st-price.html#139240

Please Log in or Create an account to join the conversation.

More
12 years 8 months ago - 12 years 8 months ago #139419 by jschroeder
Hi nicolas i changed the code as you suggested and thought it was working but i am still getting another SQL error now. I have a price slider in my filtering system. Whenever I select my price slider/cursor price and select the product brand i still get the following sql error:

SQL=SELECT DISTINCT b.* FROM hkta4_hikashop_product_category AS a LEFT JOIN (SELECT * FROM hkta4_hikashop_product AS product2 LEFT JOIN hkta4_hikashop_price AS price2 ON product2.product_id=price2.price_product_id WHERE (price2.price_access = 'all' OR price2.price_access LIKE '%,1,%' OR ISNULL(price2.price_access)) AND product2.product_type='main' GROUP BY product2.product_id ORDER BY price2.price_min_quantity ASC) AS b ON a.product_id=b.product_id INNER JOIN hkta4_hikashop_product_category AS Mattress_Brand1 ON Mattress_Brand1.product_id=product2.product_id AND Mattress_Brand1.category_id IN (30) LEFT JOIN hkta4_hikashop_price AS price_join ON price_join.price_product_id=b.product_id WHERE b.product_published=1 AND b.product_type = 'main' AND a.category_id IN (21) AND (b.product_access = 'all' OR b.product_access LIKE '%,1,%') AND ( ( case when b.price_currency_id IS NULL then 0 when b.price_currency_id = '1' then (b.price_value/0.73465) when b.price_currency_id IS NULL then 0 when b.price_currency_id = '2' then b.price_value end ) >= 1 ) AND ( case when b.price_currency_id IS NULL then 0 when b.price_currency_id = '1' then (b.price_value/0.73465) when b.price_currency_id IS NULL then 0 when b.price_currency_id = '2' then b.price_value end ) BETWEEN 3070 AND 20000 ORDER BY price_join.price_value ASC LIMIT 0, 12


when changing the price to filter from lowest to highest. It now interferes with the price cursor slider..How can i fix the above error
?
Last edit: 12 years 8 months ago by jschroeder.

Please Log in or Create an account to join the conversation.

More
12 years 8 months ago #139531 by nicolas
Hi,

Change the line:
Code:
if(preg_match('#hikashop_product AS ([a-z0-9_]+)#i',$a,$matches)){
to:
Code:
if($a[0]!='(' && strpos($a,') AS b') && preg_match('#hikashop_product AS ([a-z0-9_]+)#i',$a,$matches)){
in the file administrator/components/com_hikashop/classes/filter.php and that should avoid that other issue.

Please Log in or Create an account to join the conversation.

More
12 years 8 months ago #139573 by jschroeder
Thank you so much that worked!

Please Log in or Create an account to join the conversation.

Time to create page: 0.195 seconds
Powered by Kunena Forum