首先是我的问题,然后是(许多...信息): 当我希望用户能够从下拉框中选择多个答案,将它们保存在他们的个人资料中,然后让其他用户输入他们的搜索条件(可以再次是多个)并最终找到用户时,我考虑可用性和速度的选择是什么那些多重搜索条件?
信息: 目前,我正忙于将我网站的一部分用作婚介系统,就像约会网站使用的一样。
(我正在为我的网站使用 Mysqli、PHP 和 jQuery)
我以约会网站为例来详细说明我的问题:用户 A 填写他/她的个人资料并输入他们对某个汽车品牌的偏好:宝马、大众和梅赛德斯。用户 B 想在网站上搜索喜欢 BMW 和/或 Mercedes 的成员(member)。
我最初的想法是让用户 A 填写一个输入的多个 html 字段,并将其作为数组(或逗号分隔)存储在我的数据库的一列中。然后弄清楚如何通过为用户 B 在其中存储数组的列进行选择搜索。
所以基本上用户 A 可以在他们的个人资料中输入多个汽车品牌,用户 B 也可以给出他们的标准也是多个汽车品牌;选择查询应获取匹配条件的任何行。
输入字段倍数看起来像:
<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 会给出搜索条件“bmw and mercedes”。然后查询应该返回 3 行:
Id Name CarbrandPref
---------------------------------------------------------
1 Mike bmw,volkswagen,mercedes
2 Paul Mercedes, ford, GMC
4 John ford, bmw
在我搜索 SO 和其他网站以实现此功能时,我注意到每个人都说这(存储在数据库中的数组中)对性能等不利。此外,我无法通过数组进行选择搜索mysql 工作。
所以现在我不知所措。我不想为每个可能的汽车品牌添加一列,但还能做什么?有没有人可以帮我解决这个问题?非常感谢任何想法!
我希望这足够清楚,以便有人能帮助我。如果不是,请告诉我,我会添加请求的信息。
我已经使用这些链接将下拉框填充的数组存储到 mysql 数据库中:
最佳答案
你有三个选择。
第一个是沿着你的路径走下去,并尝试比较两个逗号分隔的列表。这会产生非常非常难看的 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,我对数据结构和查询很满意。因此,它使我能够更好地控制结果。
在您的情况下,全文搜索可能更容易快速实现,而且很可能会更快或更快。全文搜索还允许您执行更复杂的 bool 运算,例如混合“AND”和“OR”以及进行自然语言搜索以获得相关值。
关于php - html选择多项选择输入,将它们存储在mysql db中并搜索匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18173557/
我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg
如何匹配未被反斜杠转义的平衡定界符对(其本身未被反斜杠转义)(无需考虑嵌套)?例如对于反引号,我试过了,但是转义的反引号没有像转义那样工作。regex=/(?!$1:"how\\"#expected"how\\`are"上面的正则表达式不考虑由反斜杠转义并位于反引号前面的反斜杠,但我愿意考虑。StackOverflow如何做到这一点?这样做的目的并不复杂。我有文档文本,其中包括内联代码的反引号,就像StackOverflow一样,我想在HTML文件中显示它,内联代码用一些spanMaterial装饰。不会有嵌套,但转义反引号或转义反斜杠可能出现在任何地方。
在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这
所以我在关注Railscast,我注意到在html.erb文件中,ruby代码有一个微弱的背景高亮效果,以区别于其他代码HTML文档。我知道Ryan使用TextMate。我正在使用SublimeText3。我怎样才能达到同样的效果?谢谢! 最佳答案 为SublimeText安装ERB包。假设您安装了SublimeText包管理器*,只需点击cmd+shift+P即可获得命令菜单,然后键入installpackage并选择PackageControl:InstallPackage获取包管理器菜单。在该菜单中,键入ERB并在看到包时选择
我有一个驼峰式字符串,例如:JustAString。我想按照以下规则形成长度为4的字符串:抓取所有大写字母;如果超过4个大写字母,只保留前4个;如果少于4个大写字母,则将最后大写字母后的字母大写并添加字母,直到长度变为4。以下是可能发生的3种情况:ThisIsMyString将产生TIMS(大写字母);ThisIsOneVeryLongString将产生TIOV(前4个大写字母);MyString将生成MSTR(大写字母+tr大写)。我设法用这个片段解决了前两种情况:str.scan(/[A-Z]/).first(4).join但是,我不太确定如何最好地修改上面的代码片段以处理最后一种
我正在使用Rails构建一个简单的聊天应用程序。当用户输入url时,我希望将其输出为html链接(即“url”)。我想知道在Ruby中是否有任何库或众所周知的方法可以做到这一点。如果没有,我有一些不错的正则表达式示例代码可以使用... 最佳答案 查看auto_linkRails提供的辅助方法。这会将所有URL和电子邮件地址变成可点击的链接(htmlanchor标记)。这是文档中的代码示例。auto_link("Gotohttp://www.rubyonrails.organdsayhellotodavid@loudthinking.
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle
状态:我正在构建一个应用程序,其中需要一个可供用户选择颜色的字段,该字段将包含RGB颜色代码字符串。我已经测试了一个看起来很漂亮但效果不佳的。它是“挑剔的颜色”,并托管在此存储库中:https://github.com/Astorsoft/picky-color.在这里我打开一个关于它的一些问题的问题。问题:请建议我在Rails3应用程序中使用一些颜色选择器。 最佳答案 也许页面上的列表jQueryUIDevelopment:ColorPicker为您提供开箱即用的产品。原因是jQuery现在包含在Rails3应用程序中,因此使用基