1

これを説明するつもりですので、ご容赦ください。

これは、スフィンクスによってインデックス付けされた私の MYSQL テーブル構造です

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

「愛」をクエリするときにスフィンクスから取得しようとしているのは、次のようなものです。

love = 2 hit
lover = 1 hit

誰でもそれを行う方法を知っていますか? 次のphpコードを試しましたが、出力されるのは「愛」のtag_idの束だけです

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

私もこれを試しましたが、うまくいきませんでした

$cl->setGroupDistinct('tag');

これを解決するためにスフィンクスの group by を使用できると思いますが、私はかなり無知です。助けていただければ幸いです。ありがとう!

4

2 に答える 2

0

setGroupDistinctグループ化しているのと同じ属性で使用したくないと思います。SQL 用語では、次のようになります。

SELECT COUNT(DISTINCT tag)
FROM my_tags
GROUP BY tag

私が知る限り、タグごとに 1 つの一致しか返されません。

への呼び出しを削除するsetGroupDistinctか、個別のフィールドを外部 ID に変更するだけで (したがって、1 つのエントリに添付された複数の同一のタグが除外されます)、うまくいくと思います。

于 2010-02-01T19:09:20.223 に答える
0

タグを数えて desc.you を並べ替えたい場合は、setGroupBy 関数に句を追加する必要があります。

$cl->setGroupBy('tag', SPH_GROUPBY_ATTR,'@count desc');
$result = $cl->query('');
于 2016-11-05T01:38:58.770 に答える