- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
一个简单的问题是php中的preg_match
和mysql查询中的like
是相同的吗?
主要问题:
下面是我的两张表,表1和表2
Table 1 Table 2
+-------+-------------------------+ +-------+------------------------------+| ID | Model | | ID | Model |+-------+-------------------------+ +-------+------------------------------+| 1 | iPad 2 WiFi 16GB | | 1 | iPad2 WiFi 16GB || 2 | iPhone 4S 16GB | | 2 | iPhone4S 16GB || 3 | iPod Touch(4th Gen)8GB | | 3 |iPod Touch 4th Generation 8GB |+-------+-------------------------+ +-------+------------------------------+
Now what i wanna do is to compare these two tables as you can see iPad 2 WiFi 16GB
and iPad2 WiFi 16GB
or iPod Touch(4th Gen)8GB
and iPod Touch 4th Generation 8GB
both are the same but it doesnot show if i put in my query where Table1.model = Table2.model
because they are not the exact match. What I wanna do is to compare these rows with mysql query by using like
or anyother way so it'll compare the both table rows which are alike. Kindly let me know how to write such sql query.
I tried the following sql query but it didnot return all the rows like it didnot return those type of rows that are mentioned in the above example.
SELECT table1.model as model1, table2.model as model2
FROM table1,table2 WHERE table1.model REGEXP table2.model
最佳答案
两个问题-描述是标准的(描述不变)还是用户输入的?如果它们是标准列,则添加一个整数列并对此列进行比较。
如果它是由用户输入的,则您的工作会更复杂,因为您正在寻找更模糊的搜索。我使用了一个双程序搜索算法来对两个字符串之间的相似性进行排序,但这不能在mysql中直接完成。
可以使用like代替模糊搜索,但如果最终将“%”放在搜索词的开头,则其效率仅限于执行表扫描。此外,它还意味着您可以在选择的子字符串部分获得匹配,这意味着您需要提前知道子字符串。
一旦我知道你想做什么,我很乐意再详细说明。
编辑1:好的,考虑到你的精雕细琢,你需要像我提到的那样做一个模糊风格的搜索。我使用了一个bi gram方法,它包括获取用户所做的每个条目,并将其分成2或3个字符的块。然后,我将这些块存储在另一个表中,并将每个条目键回到实际描述。
例子:
描述1:“快速前进”
说明2:“短跑前进”
如果将每个字符分为两个字符块-“a”、“f”、“fa”、“as”、“st”……
然后,您可以比较两个字符串匹配的两个字符块的数量,得到一个“分数”,这意味着两者之间的准确性或相似性。
如果我不知道您使用的是什么开发语言,我将不考虑实现,但这需要在mysql中不显式地完成。
或者懒惰的替代方法是使用类似亚马逊的云搜索服务,该服务将根据你给出的术语提供搜索……但不确定它们是否允许你不断添加新的描述以供考虑,而且根据你的应用程序,可能会有点昂贵(imho)。
R
有关bigram实现的另一篇so文章-请参见SO bigram / fuzzy search
——根据提问者的阐述进行更新---
首先,我假设您阅读了我提供的链接的理论。其次,我将尽量保持它与数据库无关,因为它不需要mysql(尽管我使用它,而且它工作得非常好)
好的,所以bigram方法只有在可能的匹配比较小的情况下才能在内存数组中正常工作,否则它会很快受到表扫描性能的影响,比如没有索引的mysql表。因此,您将使用数据库的优势来帮助您进行索引。
您需要一个表来保存用户输入的“术语”或您要比较的文本。最简单的形式是一个包含两列的表,一个是唯一的自动递增整数,它将被索引,我们将在下面调用hd_id,第二个是varchar(255),如果字符串很短,或者文本很长,可以任意命名。
然后,您需要创建另一个至少有三列的表-一列作为引用列返回到另一个表的自动递增列(我们将在下面调用此hd_id),第二列将是最多5个字符的varchar()(这将保存您的bigram块),我们将称之为“bigram”在下面,第三列是一个自动递增的列,名为b_id below。此表将保存每个用户条目的所有大图,并与整个条目相关联。您需要单独为varchar列编制索引(或者在复合索引中按顺序排列)。
现在,每当用户输入您要搜索的术语时,您需要在第一个表中输入该术语,然后将该术语分解为大图,并使用对第一个表中的整个术语的引用将每个块输入到第二个表中,以完成关系。这样,在php中进行剖析,但是让mysql或任何数据库为您进行索引优化。在bigram阶段存储表1中为计算阶段生成的bigram的数量可能会有帮助。下面是一些php代码,让您了解如何创建bigram:
// split the string into len-character segments and store seperately in array slots
function get_bigrams($theString,$len)
{
$s=strtolower($theString);
$v=array();
$slength=strlen($s)-($len-1); // we stop short of $len-1 so we don't make short chunks as we run out of characters
for($m=0;$m<$slength;$m++)
{
$v[]=substr($s,$m,$len);
}
return $v;
}
select count(b_id) as matches,a.hd_id,description, from table2 a
inner join table1 b on (a.hd_id=b.hd_id)
where bigram in (" . $sqlstr . ")
group by hd_id order by matches desc limit X
关于php - 模式与两个表列之间的mysql进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13417194/
对此感到疯狂,真的缺少一些东西。 我有webpack 4.6.0,webpack-cli ^ 2.1.2,所以是最新的。 在文档(https://webpack.js.org/concepts/mod
object Host "os.google.com" { import "windows" address = "linux.google.com" groups = ["linux"] } obj
每当我安装我的应用程序时,我都可以将数据库从 Assets 文件夹复制到 /data/data/packagename/databases/ .到此为止,应用程序工作得很好。 但 10 或 15 秒后
我在 cc 模式缓冲区中使用 hideshow.el 来折叠我不查看的文件部分。 如果能够在 XML 文档中做到这一点就好了。我使用 emacs 22.2.1 和内置的 sgml-mode 进行 xm
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。 我们不允许提出有关书籍、工具、软件库等方面的建议的问题。您可以编辑问题,以便用事实和引用来回答它。 关闭
根据java: public Scanner useDelimiter(String pattern) Sets this scanner's delimiting pattern to a patt
我读过一些关于 PRG 模式以及它如何防止用户重新提交表单的文章。比如this post有一张不错的图: 我能理解为什么在收到 2xx 后用户刷新页面时不会发生表单提交。但我仍然想知道: (1) 如果
看看下面的图片,您可能会清楚地看到这一点。 那么如何在带有其他一些 View 的简单屏幕中实现没有任何弹出/对话框/模式的微调器日期选择器? 我在整个网络上进行了谷歌搜索,但没有找到与之相关的任何合适
我不知道该怎么做,我一直遇到问题。 以下是代码: rows = int(input()) for i in range(1,rows): for j in range(1,i+1):
我想为重写创建一个正则表达式。 将所有请求重写为 index.php(不需要匹配),它不是以/api 开头,或者不是以('.html',或'.js'或'.css'或'.png'结束) 我的例子还是这样
MVC模式代表 Model-View-Controller(模型-视图-控制器) 模式 MVC模式用于应用程序的分层开发 Model(模型) - 模型代表一个存取数据的对象或 JAVA PO
我想为组织模式创建一个 RDF 模式世界。您可能知道,组织模式文档基于层次结构大纲,其中标题是主要的分组实体。 * March auxiliary :PROPERTIES: :HLEVEL: 1 :E
我正在编写一个可以从文件中读取 JSON 数据的软件。该文件包含“person”——一个值为对象数组的对象。我打算使用 JSON 模式验证库来验证内容,而不是自己编写代码。符合代表以下数据的 JSON
假设我有 4 张 table 人 公司 团体 和 账单 现在bills/persons和bills/companys和bills/groups之间是多对多的关系。 我看到了 4 种可能的 sql 模式
假设您有这样的文档: doc1: id:1 text: ... references: Journal1, 2013, pag 123 references: Journal2, 2014,
我有这个架构。它检查评论,目前工作正常。 var schema = { id: '', type: 'object', additionalProperties: false, pro
这可能很简单,但有人可以解释为什么以下模式匹配不明智吗?它说其他规则,例如1, 0, _ 永远不会匹配。 let matchTest(n : int) = let ran = new Rand
我有以下选择序列作为 XML 模式的一部分。理想情况下,我想要一个序列: 来自 my:namespace 的元素必须严格解析。 来自任何其他命名空间的元素,不包括 ##targetNamespace和
我希望编写一个 json 模式来涵盖这个(简化的)示例 { "errorMessage": "", "nbRunningQueries": 0, "isError": Fals
首先,我是 f# 的新手,所以也许答案很明显,但我没有看到。所以我有一些带有 id 和值的元组。我知道我正在寻找的 id,我想从我传入的三个元组中选择正确的元组。我打算用两个 match 语句来做到这
我是一名优秀的程序员,十分优秀!