我的问题首先(很多…信息):当我希望用户能够从下拉框中选择多个答案,将其保存在他们的个人资料中,然后让其他用户键入他们的搜索标准(可以再次成为多个)并最终查找用户时,我有什么选择考虑可用性和速度?那些多重的搜...
我的问题首先(很多…信息):
当我希望用户能够从下拉框中选择多个答案,将其保存在他们的个人资料中,然后让其他用户键入他们的搜索标准(可以再次成为多个)并最终查找用户时,我有什么选择考虑可用性和速度?那些多重的搜索标准?
信息:
目前我忙于将我的网站的一部分作为配对系统,就像约会网站一样.
(我在我的网站上使用Mysqli,PHP和jQuery)
我使用约会网站作为一个例子来详细说明我的问题:用户A填写他/她的个人资料并输入他们对某个汽车品牌的偏好:宝马,大众和梅赛德斯.用户B想要在网站上搜索喜欢宝马和/或梅赛德斯的会员.
我最初的想法是让用户A填写输入多个html字段并将其作为数组(或以逗号分隔)存储在我的数据库的一列中.然后找出如何选择 – 搜索通过该列存储数组的用户B.
因此,基本上用户A可以在他们的个人资料中输入多个汽车品牌,而用户B可以给他们的标准也是多个汽车品牌; select查询应该获取匹配条件的任何行.
输入字段多个看起来像:
<tr><td>Which car brand(s) do you like?</td><td>
<select multiple name="CarBrandPref[]">
<option value="BMW" > BMW</option>
<option value="Ford" > Ford</option>
<option value="Mercedes" > Mercedes </option>
<option value="GMC" > GMC</option>
<option value="Volkswagen" > Volkswagen </option>
<option value="Toyota" > Toyota </option>
<option value="Audi" > Audi </option>
</select>
</td></tr>
配置文件表布局类似于:
Id Name CarbrandPref
--------------------------------------------------------
1 Mike bmw,volkswagen,mercedes
2 Paul Mercedes, ford, GMC
3 Axel GMC, ford, toyota, audi
4 John ford, bmw
用户B会给searchcriteria’bmw和mercedes’.然后查询应该返回3行:
Id Name CarbrandPref
---------------------------------------------------------
1 Mike bmw,volkswagen,mercedes
2 Paul Mercedes, ford, GMC
4 John ford, bmw
当我在SO和其他网站上搜索得到这个工作时,我注意到每个人都说这个(存储在db中的数组中)对性能等有害等.此外我无法通过mysql中的数组进行select-search工作.
所以现在我不知所措.我不想为每个可能的carbrand添加一列,但该怎么做?有没有人可以帮我这个?任何想法都非常感谢!
我希望这足以让有人帮助我.如果不是,请告诉我,我将添加所需的信息.
我使用这些链接能够将dropdownbox填充的数组存储到mysql数据库中:
http://www.aleixcortadellas.com/main/2009/03/20/492/
http://toolspot.org/how-to-store-array-mysql.php
解决方法:
你有三个选择.
首先是沿着你的路径前进并尝试比较两个逗号分隔的列表.这会产生非常非常丑陋的SQL.它不允许索引.基本想法是这样的:
where find_in_set(substring_index(@list, ',', 1), CarBrands) > 0 or
find_in_set(substring_index(substring_index(@list, ',', 2), ',', -1), CarBrands) > 0 or
. . .
第二个是引入一个新表,它有一行供用户使用,最喜欢的是一行.让我们做一般,所以有一个用户列,一个类别列(“CarBrand”)和一个名称.然后查询看起来像:
from Profile p left outer join
Favorites f
on p.userId = f.userId and f.Category = 'CarBrand'
group by p.userId
having sum(f.Name = 'Mercedes') > 0 and
sum(f.Name = 'BMW') > 0;
第三种选择是使用全文搜索和匹配功能.文档是here.
我的猜测是全文索引可能是你做你想做的最简单的方法.
编辑:
关于全文索引与选项2的查询.可能关键问题与停用词和短期术语有关.例如,全文索引会删除少于4个字符的单词(默认情况下,您可以更改这两个字符).它还有一个停用词列表.
我个人倾向于使用第二种选择.但原因可能并不好.它使用标准SQL,我对数据结构和查询很满意.因此,它让我可以更好地控制结果.
在您的情况下,全文搜索可能更容易快速实现,并且可能会更快或更快.全文搜索还允许您执行更复杂的布尔值,例如混合“AND”和“OR”以及进行自然语言搜索以获得相关性值.
本文标题为:php – html选择多项选择输入,将它们存储在mysql db中并搜索匹配项
基础教程推荐
- AJax 把拿到的后台数据在页面中渲染的实例 2023-02-23
- 使用html5新特性轻松监听任何App自带返回键的示例 2022-09-16
- html+ajax实现上传大文件功能 2023-02-14
- 上传头像后导航栏中头像同步(Vue中监听sessionStorage) 2023-10-08
- JavaScript Pinia代替 Vuex的可行性分析 2022-08-30
- 如何避免常见的6种HTML5错误用法 2022-09-16
- react vue 等等这种mvvm思维的开发方式怎么编写通用组件,或者什么样的组件应该编写为通用组件 2023-10-08
- JavaScript实现可拖拽的进度条 2023-08-08
- AJAX请求数据及实现跨域的三种方法详解 2023-02-24
- html+css实现血轮眼轮回眼特效代码 2022-09-20