有一个商标表,包括商标名称(名称统一都是汉字)、商标号码等等,现在需求是:在用户输入一个商标名称时,可以查询同名、同音的商标。 例如:输入查询商标名称“华为”,查询结果可以显示出“华为”、“化为”、“华威”、“华微”、"花薇”等等同名、同音的商标。
目前考虑解决办法是,在商标表中,增加一列 pinyin 名称,在创建商标时,自动生成一列拼音的名称属性“name_pinyin"存储名称的汉语拼音,再创建组合查询如下 ,但是考虑这种增加仅仅为方便查询所用增加列,感觉不美,不知道有没有更简洁的查询处理方法?
search_result = trademarks.where("name like ? or name_pinyin like ?", name, Pinyin.t(name))
从上面的问题衍生出来一个问题:如果对象属性列中,包含一个属性,但是需要对该属性进行必要的转化、清洗后才能对比查询的的简洁处理方法是?
譬如:一张学生列表,只保存了姓名、身份证号,班级等等,没有性别这一列(按照表尽量简单的原则,身份证号码可以查询性别、出生日期就没单独增加性别、出生日期的属性),现在要通过身份证号码查出性别为男生、出生月份为 9 月的学生(仅做举例,所以表尽可能设置的简单,没有出生年月和性别的列,需要从身份证中推导)。 如果不增加列,简洁的处理方法是?