- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个表,一个用于保存用户的数据,另一个用于保存机构数据。我试图弄清楚如何将某些用户详细信息与机构详细信息进行比较。例如,将口语与所需语言进行匹配。
似乎有很多方法可以做到这一点,但现在我只是想弄清楚如何做到这一点。
由于重建旧系统的怪癖,旧数据的存储方式如下:法语、俄语、普通话、泰语、印度尼西亚语、阿拉伯语、印度语、亚洲语
这意味着我从表中获取数据并且必须先分解它
$agency = AgencyLogin::find(196);
$language = $agency->Languages;
$lang = explode(',', $language);
但是之后我有点困惑,因为那时我需要获取此代理语言配置文件,并将其与所有用户进行比较,并打印具有语言匹配的用户以及这些匹配是什么。
现在我正在尝试一些非常粗糙的方法,它不适用于不同的信息集:
$ministry = AgencyLogin::find(184);
$prefs = $ministry->Ministry_Preferences;
$tags = explode(',', $prefs);
$sub_categories = DB::table('descriptor')
->whereIn('tag', $tags)
->get(['subcategory', 'description']);
$match = DB::table('users')->select('Ministry_Preferences');
$matches = [];
foreach ($match as $mat) {
$user = explode(',', $mat);
$inter = $tags->intersect($user);
$matches = array_add($matches, $inter);
}
$view->with(['sub_categories', $sub_categories], ['matches', $matches]);
显然,你们中的一些人会看到这个并说,“不要像你这个白痴那样存储数据”,我会同意你的观点,但是有很多数据以这种方式存储,这意味着我必须重建数据库的大部分,正确链接所有内容,然后编写迁移代码,以便在我们最终上线时将当前的实时数据库正确迁移到当前本地开发数据库的格式。这需要一段时间,因为我必须学习如何执行每个步骤,并且可能会在过程中破坏一些东西,所以……让我们暂时保留胶带。
最佳答案
第一种方法
如果您以与代理机构相同的方式为用户存储语言,我的建议是添加 ,
在语言(在用户表中)字符串的开头和结尾,如下所示:,French,Russian,Mandarin,Thai,Indonesian,Arabic,Indian,Asian,
所以你将能够构建一个简单的SELECT
查询在此栏进行搜索。
更新所有记录的示例查询:
UPDATE table SET languages=CONCAT(',',languages,',') WHERE 1
然后,正如您在问题中所写的那样,获取代理语言,拆分它们并迭代它们。并在此循环中查询用户表以通过以下方式查找与当前语言匹配的用户:
SELECT ... FROM users WHERE language LIKE ('%,:language,%)
或
$agencyLanguage = ','.$agencyLanguage.',';
SELECT ... FROM users WHERE language LIKE ('%$agencyLanguage%)
其中:语言是机构的绑定(bind)语言(循环中的众多语言之一)。
另一种方法
如果您当前的数据库引擎支持全文搜索,那么您可以将全文索引放在要搜索的列上(据我所知,这将是 languages
表中的 users
列)。然后你会得到代理语言,这次NOT爆炸为,
但像这样替换:
$agencyLanguages = '+"French" +"Russian" +"Mandarin"';
然后您可以在搜索查询中使用它:
SELECT * FROM users WHERE MATCH (quote) AGAINST (:agencyLanguages IN BOOLEAN MODE)
关于php - 比较表和生成匹配项的最简单方法是什么?拉拉维尔 5.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40417419/
我是一名优秀的程序员,十分优秀!