2011-01-17 16 views
0

は、私は、次のMySQLのテーブルを持っている:スフィンクスPHP一対多検索

CREATE TABLE `video` (
`video_id` int(11) unsigned NOT NULL auto_increment, 
`title` varchar(255) NOT NULL default '', 
`description` text NOT NULL, 
PRIMARY KEY (`video_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

CREATE TABLE `video_categories` (
`cat_id` int(11) unsigned NOT NULL auto_increment, 
`name` varchar(255) NOT NULL default '', 
PRIMARY KEY (`cat_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

CREATE TABLE `video_category` (
`video_id` int(11) unsigned NOT NULL default '0', 
`cat_id` int(11) unsigned NOT NULL default '0', 
KEY `video_id` (`video_id`), 
KEY `cat_id` (`cat_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

CREATE TABLE `video_tags` (
`tag_id` int(11) unsigned NOT NULL auto_increment, 
`video_id` int(11) unsigned NOT NULL default '0', 
`name` varchar(255) NOT NULL default '', 
KEY `video_id` (`video_id`), 
KEY `name` (`name`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

私はスフィンクスの設定ファイルを作成し、私はPHPから検索することができます。問題は、関連する動画を検索したいとき、関連する動画が検索している動画と同じカテゴリにある必要があるときです。たとえば、MVAとSetFilter( 'categories'、array(3))でこれを行うことができますが、マッチ結果の総数はカテゴリ内のものではなく、グローバルなものです(私はajaxでページネーションを表示するために合計が必要です)。

どのように私は指定されたカテゴリにのみあるビデオ(スフィンクスの文書)を検索できますか?

ありがとう、 エイドリアン。

答えて

0

あなたは、カテゴリIDスフィンクスでinteger attributeのために定義することができます。

sql_attr_uint = cat_id 

そしてちょうどあなたのクエリに@cat_id=12345を追加します。

+0

ビデオは複数のカテゴリに属していても機能しますか? – Adrian

+1

そのためには、複数値属性を使用できます。http://sphinxsearch.com/docs/manual-0.9.9.html#mva –

+0

SetFilterでMVAを使用しました。必要なのは、指定したカテゴリの関連動画の合計数です。 MVAは実際に(すべてのカテゴリで)グローバル検索を行い、次にSetFilterを使用して結果をフィルタリングできます。 – Adrian

関連する問題