2010-02-01 7 views
1

Je vais illustrer cela, alors s'il vous plaît, gardez-moi.sphinx GROUP BY

Ceci est mon MYSQL Structure du tableau indexé par sphynx

------- ------- -------------- 
tag_id | tag | foreign_id | 
------- ------- -------------- 
1  love  111 
2  blue  222 
3  lover  333 
4  yellow 444 
5  love  555 
6  lov  666 

Ce que je suis en train d'obtenir de sphynx quand je fais une recherche « amour » est quelque chose comme ceci:

love = 2 hit 
lover = 1 hit 

quelqu'un a des idée comment cela peut-il être fait? J'ai essayé le code php suivant, mais toutes les sorties, il est juste un tas de tag_id pour « amour »

$cl->setGroupDistinct('tag'); 
$cl->setGroupBy('tag', SPH_GROUPBY_ATTR); 
$cl->SetLimits(0, 10, 500); 
$result = $cl->query("love", 'mytags'); 

J'ai même essayé cela, mais ça n'a pas aussi bien

$cl->setGroupDistinct('tag'); 

Je pense que le groupe de sphynx par peut être utilisé pour résoudre cela, mais je suis assez désemparé. L'aide est grandement appréciée! Merci!

Répondre

0

Je ne pense pas que vous voulez utiliser setGroupDistinct sur le même attribut que vous regroupez. Dans la terminologie SQL, cela ressemblerait à:

SELECT COUNT(DISTINCT tag) 
FROM my_tags 
GROUP BY tag 

qui pour autant que je peux dire ne retournerait qu'une correspondance pour chaque étiquette.

Je pense que si vous supprimez simplement l'appel à setGroupDistinct ou changez le champ distinct pour l'id étranger (filtrant ainsi plusieurs étiquettes identiques attachées à une entrée), vous serez prêt à partir.

0

Si vous souhaitez compter la balise et la commande desc, vous devez ajouter une clause supplémentaire à la fonction setGroupBy.

$cl->setGroupBy('tag', SPH_GROUPBY_ATTR,'@count desc'); 
$result = $cl->query('');