使用mysql和PHP如何实现搜索2个不同的表格数据?
我正在使用MATCH AGAINST子句。
它对单个表格工作正常。就像我想在商店的餐桌上搜索一样。没问题。
我想要的是能够在单个结果页面中搜索和显示来自不同表格的结果。
例如,如果i型 “巧克力衣服”
i可以得到4个结果如下:
Shop1结果
ShopItem1导致
ShopItem2导致
SHOP2结果
当然还有mos相关结果应该排在第一位。
我有很多问题。设计明智以及执行明智
1)我应该改变我的设计?我正在考虑创建一个名为搜索结果的单独表格,其中包含来自SHOPS和SHOPPRODUCTS表格的数据。但是这意味着我有一些数据重复。
2)我应该保持我目前的设计吗?如果是这样,那么我怎样才能通过两个不同表格的相关性对搜索结果进行排序?
我看到rottentomatoes在不同的组织他们的搜索结果。然而,我们更喜欢搜索结果不受不同类型的限制,特别是当我们有分页时,更难以导航UI。
http://www.rottentomatoes.com/search/full_search.php?search=girl
OR,实际上是最好的出路?
我希望有人可以给我这方面的指导,特别是如果你有在生成搜索结果的经验,看起来像多个表。
以来受需求,我就会把表结构在这里
CREATE TABLE `shopitems` (
`id` int(10) unsigned NOT NULL auto_increment,
`ShopID` int(10) unsigned NOT NULL,
`ImageID` int(10) unsigned NOT NULL,
`name` varchar(100) NOT NULL,
`description` varchar(255) NOT NULL,
`pricing` varchar(45) NOT NULL,
`datetime_created` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=31 DEFAULT CHARSET=utf8;
/*Table structure for table `shops` */
DROP TABLE IF EXISTS `shops`;
CREATE TABLE `shops` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(100) default NULL,
`description` text,
`keywords` text,
`url` varchar(255) default '',
`owner_id` varchar(255) default NULL,
`datetime_created` datetime default NULL,
`created_by` varchar(255) default NULL,
`datetime_modified` datetime default NULL,
`modified_by` varchar(255) default NULL,
`overall_rating_avg` decimal(4,2) default '0.00',
PRIMARY KEY (`id`),
FULLTEXT KEY `url` (`url`),
FULLTEXT KEY `TitleDescFullText` (`keywords`,`title`,`description`,`url`)
) ENGINE=MyISAM AUTO_INCREMENT=3051 DEFAULT CHARSET=utf8;
我打算通过描述和shopproducts表的名称列进行搜索。
但你可以看到它还没有实现。
虽然搜索商店已经启动并正在运行。
添加表结构将有助于获得良好的答案 – 2009-09-26 10:44:22
嗨您是什么意思?你的意思是我应该有一个名为search_results的单独表格,它包含所有现有的数据,并根据单独的表格进行匹配? – 2009-09-26 11:26:30
依靠Sphinx或Xapian上的全文搜索不是更容易吗?以给定的时间间隔创建索引,并且只在其中搜索将大大提高搜索速度。 – unexist 2009-09-30 14:26:26