boite de recherche ne retourne pas tout

  • Posts: 2639
  • Thank you received: 66
  • Hikashop Business
12 years 8 months ago #42855

Bonjour

avec

SELECT *
FROM `sacfr_hikashop_product`
WHERE `product_name` LIKE '%noir%'
AND `product_published` =1
je retourne 140 produits

la boite de recherche Joomla sur HikaShop products search plugin activé avec Search Limit = 50 sur product_name m'en retourne 6 !

savez vous pourquoi et comment changer ça ?

merci

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

  • Posts: 82863
  • Thank you received: 13372
  • MODERATOR
12 years 8 months ago #42870

Par ce que la requête qui est executée contient bien plus de conditions que la votre.
Par exemple, il y a cette condition:
a.product_type=\'main\'
pour que la recherche ne retourne que des produits principaux, pas des variantes.
Ou cette condition:
'b.category_id IN (XXX,YYY)
pour que la recherche ne retourne que des produits étant dans des catégories publiées.
Ou encore celle ci:
a.product_quantity!=0
pour que la recherche ne retourne que des produits avec du stock.
Bref, c'est plus complexe qu'il n'y parait.
Vous devriez regarder la requête qui est executée par la recherche en activante le mode débug de joomla.
Ca vous permettra de comparer avec la votre histoire de comprendre pourquoi vous n'avez pas le même nombre de résultats.

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

  • Posts: 2639
  • Thank you received: 66
  • Hikashop Business
12 years 8 months ago #42877

c'est ce que je viens de faire et c'est votre requête qui ne convient pas , il y a bien 140 produits qui correspondent a ce critère de recherche et avec une limit de 50 je devrais en avoir 50


votre requete -->

SELECT a.product_id AS id, a.product_name, a.product_created AS created , a.product_description, "2" AS browsernav, b.category_id as category_id
FROM sacfr_hikashop_product AS a
INNER JOIN sacfr_hikashop_product_category AS b
ON a.product_id=b.product_id
WHERE a.product_published=1
AND a.product_type='main'
AND a.product_quantity!=0
AND (a.product_access = 'all' OR a.product_access LIKE '%,2,%')
AND b.category_id IN (50,75,300,68,65,58,57,56,55,53,54,51,52,320,79,243,244,245,246,247,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,265,266,267,268,269,310,330,340,350,360,370,380,390,400,441,442,443,444,445,446,447,448)
AND ((((a.product_name LIKE '%noir%'))) OR (((a.product_description LIKE '%noir%'))))
ORDER BY a.product_modified DESC
LIMIT 0, 50

une requete qui ne tient pas compte des categories et qui en retourne bien 50 -->

SELECT a.product_id AS id, a.product_name, a.product_created AS created , a.product_description, "2" AS browsernav
FROM sacfr_hikashop_product AS a
WHERE a.product_published=1
AND a.product_type='main'
AND a.product_quantity!=0
AND (a.product_access = 'all' OR a.product_access LIKE '%,2,%')
AND (a.product_name LIKE '%noir%' OR a.product_description LIKE '%noir%')
LIMIT 0, 50


il faudrait aussi pouvoir modifier cette liste des IN et lui dire où chercher dans quelles categories en parametres du plugin

AND b.category_id IN (50,75,300,68,65,58,57,56,55,53,54,51,52,320,79,243,244,245,246,247,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,265,266,267,268,269,310,330,340,350,360,370,380,390,400,441,442,443,444,445,446,447,448)


dans mon cas IN (51,52,53,54,55,56,57,87) est suffisant

Last edit: 12 years 8 months ago by erickb.

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

  • Posts: 2639
  • Thank you received: 66
  • Hikashop Business
12 years 8 months ago #42879

votre requete ramene bien tous les produits mais comme elle cherche dans toute les catégories les produits peuvent apparaitre 6 ou 7 fois et elle garde donc 7 x 7 = 49 , elle montrera 7 uniques produits

il faut faire un GROUP BY


SELECT DISTINCT a.product_id AS id, a.product_name, a.product_created AS created , a.product_description, "2" AS browsernav, b.category_id as category_id
FROM sacfr_hikashop_product AS a
LEFT JOIN sacfr_hikashop_product_category AS b
ON a.product_id=b.product_id
WHERE a.product_published=1
AND a.product_type='main'
AND a.product_quantity!=0
AND (a.product_access = 'all' OR a.product_access LIKE '%,2,%')
AND b.category_id IN (50,75,300,68,65,58,57,56,55,53,54,51,52,320,79,243,244,245,246,247,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,265,266,267,268,269,310,330,340,350,360,370,380,390,400,441,442,443,444,445,446,447,448)
AND ((((a.product_name LIKE '%noir%'))) OR (((a.product_description LIKE '%noir%'))))
GROUP BY (a.product_id)
ORDER BY a.product_modified DESC
LIMIT 0, 50

donne le bon resultat

./plugins/search/hikashop_products/hikashop_products.php ligne 169
$query = ' SELECT DISTINCT '.$select.' FROM '.hikashop_table('product') . ' AS a '.$leftjoin.' WHERE '.implode(' AND ',$filters).' GROUP BY (a.product_id) ORDER BY '.$order;

Last edit: 12 years 8 months ago by erickb.

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

  • Posts: 2639
  • Thank you received: 66
  • Hikashop Business
12 years 8 months ago #42887

j'ai fait une variante du plugin ./plugins/search/hikashop_products/hikashop_products.xml/php

ajout dans le xml

<field
					name="categories_id"
					type="text"
					label="Catid"
					size="20"
					default=""
					description="liste separateur virgule des categories" />

dans le php
$catids = $this->params->def( 'categories_id');
			if($catids){
				$cats = $catids;
				if(!empty($cats)){
					$filters[]='b.category_id IN ('. $cats.')';
				}
			}
			else{
				$cats = $db->loadResultArray();
				if(!empty($cats)){
					$filters[]='b.category_id IN ('.implode(',',$cats).')';
				}
			}

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

  • Posts: 82863
  • Thank you received: 13372
  • MODERATOR
12 years 8 months ago #42888

Bien vu pour le group by. En effet, il est possible d'avoir plusieurs résultats retournés par la requête si les produits sont dans plusieurs catégories.
Nous allons changer cela de notre coté comme vous proposez.

La modification pour les catégories n'est du coup pas nécessaire non ?
J'ai le sentiment que ce serait une option assez obscure pour les utilisateurs...

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

  • Posts: 2639
  • Thank you received: 66
  • Hikashop Business
12 years 8 months ago #42896

je ferais une copie et mon propre plugin s'il faut mais je trouve l’idée bonne dans votre version source de pouvoir indiquer les catégories où chercher et ça mange pas d'pain :P

au lieu de IN (50,75,300,68,65,58,57,56,55,53,54,51,52,320,79,243,244,245,246,247,249,250,251,252,253,254,255,256,257,258,259,260,261,262,263,265,266,267,268,269,310,330,340,350,360,370,380,390,400,441,442,443,444,445,446,447,448)

j'ai IN (51,52,53,54,55,56,57,58)

ça allege la requete de recherche et c'est peu de choses un field name="categories_id" dans le xml

J'ai le sentiment que ce serait une option assez obscure pour les utilisateurs...

avec une bulle-survol assez explicite et un !attention peut etre

Last edit: 12 years 8 months ago by erickb.

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

  • Posts: 82863
  • Thank you received: 13372
  • MODERATOR
12 years 8 months ago #42898

Je suis d'accord que ca allège la requête mais ca n'est pas problème. Ca ne change rien à la rapidité d'execution et ca rajoute une option qui ne sert à rien pour le commun des mortels (aka les non développeurs). Je préfère plutot rajouter des options sur l'affichage des filtres ;)

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

  • Posts: 2639
  • Thank you received: 66
  • Hikashop Business
12 years 8 months ago #42900

nicolas wrote: Je suis d'accord que ca allège la requête mais ca n'est pas problème. Ca ne change rien à la rapidité d'execution et ca rajoute une option qui ne sert à rien pour le commun des mortels (aka les non développeurs). Je préfère plutot rajouter des options sur l'affichage des filtres ;)


ok pas de probleme et je peux toujours bricoler mon propre plugin comme par exemple ajouter un champ ORDER BY dans le XML

pour des options sur les filtres Nicolas c'est une excellente (et urgente) idée :whistle: :P
impératif je trouve de pouvoir afficher le filtre dans une position sans qu'il s'affiche dans la liste des produits , des identifiants bien séparés, et un bouton pour le champ de type texte qui fait office de recherche
si d'ailleurs cette partie là est faite avant la prochaine version d'Hikashop je suis preneur

Last edit: 12 years 8 months ago by erickb.

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

  • Posts: 82863
  • Thank you received: 13372
  • MODERATOR
12 years 8 months ago #42975

On va voir ce qu'on peut faire.

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

Time to create page: 0.070 seconds
Powered by Kunena Forum