我在一个表中有如下数据,列名是标题:
Acqua Di Parma Blu Mediterraneo Arancia Di Capri Scented Water EDT
Acqua Di Parma Blu Mediterraneo Arancia
Acqua Di Parma Blu Mediterraneo Bergamotto Di Calabria
Acqua Di Parma Blu Mediterraneo Cipresso Di Toscana Scented Water EDT
Acqua di Parma Blu Mediterraneo fico di amalfi
Acqua Di Parma Blu Mediterraneo Fico di Amalfi Scented Water EDT
Acqua Di Parma Blu Mediterraneo Mirto di Panarea
Acqua Di Parma Blu Mediterraneo Mirto di Panarea Scented Water EDT
Acqua Di Parma Blu Meditteraneo Cipresso
Acqua Di Parma Colonia Assoluta Bath
Acqua Di Parma Colonia Assoluta
Acqua Di Parma Colonia Body Cream
Acqua Di Parma Colonia Body Cream Tube
Adidas Deep Energy
Adidas Dynamic Pulse
Adidas Fair Play
如您所见,这些都是 Acqua Di Parma Blu Mediterraneo 和阿迪达斯产品的所有变体
有没有办法逐个字母读取数据,然后当下一个字母出现不超过说3次时,返回字母变化前的内容
基本上,我只想读取这个列表并返回
Acqua Di Parma Blu Meditteraneo
Acqua Di Parma Colonia
Adidas Deep Energy
Adidas Dynamic Pulse
Adidas Fair Play
整个表大约有 70,000 行都是相似的数据。
表格由row_id、title、category组成
可能吗?
非常感谢
达伦
最佳答案
好的 - 这不是很漂亮,也不确定它是否完全正确,但这是我能得到的最接近的。
我创建了一个单独的表,其中包含像这样的每组子字符串
create table subs as
select title,
substring_index(title, ' ',1) one,
substring_index(title, ' ',2) two,
substring_index(title, ' ',3) three,
substring_index(title, ' ',4) four,
substring_index(title, ' ',5) five,
substring_index(title, ' ',6) six,
substring_index(title, ' ',7) seven
from title;
然后创建一个查询来检查一列的分组依据是否大于 1(即不唯一),然后下一列的分组依据是否 = 1(即唯一)并且前一列是接下来,然后将每对列的结果合并在一起,最后在整个批处理中进行不同的选择
select distinct brand from (
select * from
(select one brand, count(*) bcount
from subs
group by one) one,
(select two prod, count(*) pcount
from subs
group by two) two
where bcount > 1
and pcount=1
and locate(one.brand, two.prod)>0
union all
select * from
(select two brand, count(*) bcount
from subs
group by two) two,
(select three prod, count(*) pcount
from subs
group by three) three
where two.bcount > 1
and three.pcount=1
and locate(two.brand, three.prod)>0
union all
select * from
(select three brand, count(*) bcount
from subs
group by three) three,
(select four prod, count(*) pcount
from subs
group by four) four
where three.bcount > 1
and four.pcount=1
and locate(three.brand, four.prod)>0
union all
select * from
(select four brand, count(*) bcount
from subs
group by four) four,
(select five prod, count(*) pcount
from subs
group by five) five
where four.bcount > 1
and five.pcount=1
and locate(four.brand, five.prod)>0
union all
select * from
(select five brand, count(*) bcount
from subs
group by five) five,
(select six prod, count(*) pcount
from subs
group by six) six
where five.bcount > 1
and six.pcount=1
and locate(five.brand, six.prod)>0
union all
select * from
(select six brand, count(*) bcount
from subs
group by six) six,
(select seven prod, count(*) pcount
from subs
group by seven) seven
where six.bcount > 1
and seven.pcount=1
and locate(six.brand, seven.prod)>0) x
结果如下
但它仍然存在一些问题,因为它同时显示了 Aqua Di Parma Blu 和 Aqua Di Parma Medit.. 两行而不是一行,所以它是不正确的。
关于mysql - 字符更改MySQL后SQL提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7887712/
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?
我的目标是转换表单输入,例如“100兆字节”或“1GB”,并将其转换为我可以存储在数据库中的文件大小(以千字节为单位)。目前,我有这个:defquota_convert@regex=/([0-9]+)(.*)s/@sizes=%w{kilobytemegabytegigabyte}m=self.quota.match(@regex)if@sizes.include?m[2]eval("self.quota=#{m[1]}.#{m[2]}")endend这有效,但前提是输入是倍数(“gigabytes”,而不是“gigabyte”)并且由于使用了eval看起来疯狂不安全。所以,功能正常,
在我的Rails(2.3,Ruby1.8.7)应用程序中,我需要将字符串截断到一定长度。该字符串是unicode,在控制台中运行测试时,例如'א'.length,我意识到返回了双倍长度。我想要一个与编码无关的长度,以便对unicode字符串或latin1编码字符串进行相同的截断。我已经了解了Ruby的大部分unicode资料,但仍然有些一头雾水。应该如何解决这个问题? 最佳答案 Rails有一个返回多字节字符的mb_chars方法。试试unicode_string.mb_chars.slice(0,50)
如何正确创建Rails迁移,以便将表更改为MySQL中的MyISAM?目前是InnoDB。运行原始执行语句会更改表,但它不会更新db/schema.rb,因此当在测试环境中重新创建表时,它会返回到InnoDB并且我的全文搜索失败。我如何着手更改/添加迁移,以便将现有表修改为MyISAM并更新schema.rb,以便我的数据库和相应的测试数据库得到相应更新? 最佳答案 我没有找到执行此操作的好方法。您可以像有人建议的那样更改您的schema.rb,然后运行:rakedb:schema:load,但是,这将覆盖您的数据。我的做法是(假设
对于具有离线功能的智能手机应用程序,我正在为Xml文件创建单向文本同步。我希望我的服务器将增量/差异(例如GNU差异补丁)发送到目标设备。这是计划:Time=0Server:hasversion_1ofXmlfile(~800kiB)Client:hasversion_1ofXmlfile(~800kiB)Time=1Server:hasversion_1andversion_2ofXmlfile(each~800kiB)computesdeltaoftheseversions(=patch)(~10kiB)sendspatchtoClient(~10kiBtransferred)Cl
大约一年前,我决定确保每个包含非唯一文本的Flash通知都将从模块中的方法中获取文本。我这样做的最初原因是为了避免一遍又一遍地输入相同的字符串。如果我想更改措辞,我可以在一个地方轻松完成,而且一遍又一遍地重复同一件事而出现拼写错误的可能性也会降低。我最终得到的是这样的:moduleMessagesdefformat_error_messages(errors)errors.map{|attribute,message|"Error:#{attribute.to_s.titleize}#{message}."}enddeferror_message_could_not_find(obje
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i