mysql/php搜索标记引擎
我得到了两辆摩托车的数据库:mysql/php搜索标记引擎,php,mysql,search,Php,Mysql,Search,我得到了两辆摩托车的数据库: 雅马哈R1白色2000和 雅马哈R125白色2005 当我发送查询时: SELECT * FROM bikes WHERE title LIKE '%$search%' 然后当我搜索“雅马哈R125”时,一切正常,但当你搜索“雅马哈R1”时 然后您将得到两个结果雅马哈R1和雅马哈R125 任何人都可以指定他们想要的标题,所以标题可以是“雅马哈R1白色2005”,但也可以是 “雅马哈R1品质卓越” 知道如何分类吗?为什么要使用like子句,请使用title=$s
- 雅马哈R1白色2000和
- 雅马哈R125白色2005
SELECT * FROM bikes WHERE title LIKE '%$search%'
然后当我搜索“雅马哈R125”时,一切正常,但当你搜索“雅马哈R1”时
然后您将得到两个结果雅马哈R1和雅马哈R125
任何人都可以指定他们想要的标题,所以标题可以是“雅马哈R1白色2005”,但也可以是
“雅马哈R1品质卓越”
知道如何分类吗?为什么要使用like子句,请使用title=$search
SELECT * FROM bikes WHERE title='$search'
尝试此
SELECT*FROM bikes,其中title='$search'
如果你只想要一个结果
Like子句用于通配符搜索。如果使用%sign,则将其作为通配符搜索
查看以下链接以了解更多有关的信息此处的问题是$search值:
SELECT * FROM bikes WHERE title LIKE '%$search%'
有了这个,你就可以尝试搜索那些等同于“任何东西+$search+任何东西”的标题
由于您正在搜索%yamaha R1%
,结果如下:
yamaha R1 white 2000, yamaha R125 white 2005
这里的问题是:如果您使用'%search'
它将不起作用,因为您的末尾是“白色2000”,为什么不在表的另一个字段中设置颜色和数字,然后像这样搜索它:
SELECT * FROM bikes WHERE title LIKE '$search'
这将返回雅马哈R1的所有信息,其中一个字段的颜色为“白色”,另一个字段的数字为“2000”MySQL将无法理解,只要您使用LIKE。只有两种解决方案:-
1. Either segregate model and color from that single field and keep it in separate field
2. SELECT * FROM bikes where title like 'yamaha R1%' AND title like '%2000';
如果这些都没用的话
然后,我不确定在基本Mysql中不改变模式、用户输入等是否可行
如果您使用的是专用服务器,或者有一个非常好的web主机,我碰巧知道Sphinx搜索引擎可以按照您的要求工作。这就是您想要的:
SELECT * FROM bikes WHERE title REGEXP '[[:<:]]$search[[:>:]]' = 1;
SELECT*FROM bikes,其中title REGEXP'[[::]]'=1;
当您搜索雅马哈R1时,是否只希望雅马哈R1作为结果?是的,我只希望雅马哈R1的结果在这种情况下只有一个,请检查下面的答案,为什么不在查询后添加空格如“%$search%”
这不起作用,例如,让我们说搜索:“白色雅马哈R1”,但标题看起来像“yahama R1白色2000”当我输入“雅马哈R1”不是完整的标题时,还是刚刚开始。基本上,任何人都可以输入他们想要的标题,所以可以是“品牌知道雅马哈R1 2010一个车主”,然后是更复杂的,如果人们只知道车的型号和年份,这将起作用,但当有人输入“品牌知道雅马哈R1 2010一个车主”时,这将不起作用(“选择*FROM bikes,其中title REGEXP'[[::]]'=1;”;给出“警告:mysql_fetch_array()希望参数1是资源,布尔值在中给出”