Sphinx PHP一对多搜索

时间:2011-01-17 08:55:57

标签: php sphinx one-to-many categories

我有以下mysql表:

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;

我创建了一个sphinx配置文件,我可以从PHP搜索。问题是当我想搜索相关视频时,相关视频必须与我正在搜索的视频属于同一类别。我可以使用MVA和SetFilter('categories',array(3))来做到这一点,但是匹配结果的总数是全局的(我需要通过ajax显示分页的总数)而不是类别中的那个。

我是如何搜索仅在指定类别中的视频(sphinx中的文档)的任何想法?

谢谢, 阿德里安。

1 个答案:

答案 0 :(得分:0)

您可以在Sphinx中为类别ID定义integer attribute

sql_attr_uint = cat_id

然后只需将@cat_id=12345添加到您的查询中。