我在数据库表中有5列。
列名称为:英语,法语,德语,西班牙语,俄语。
我想创建select语句,在整个表中搜索一个单词(包括所有列),而不是只搜索一列,例如:
select * from language
where English = "Parrot"
上述查询仅在“英语”栏中搜索“Parrot”一词。
我想要一个select语句,在所有列中搜索“Parrot”。
我该怎么做?
答案 0 :(得分:1)
您需要对表格进行取消操作,然后定期进行搜索
答案 1 :(得分:0)
我认为你没有比普通or
Select * from language where English = "Parrot" or French = "Parrot" or German = "Parrot"
否则,您可以将单个翻译移动到单独的表中。因此,language
中的一行不会有五个严格设置的列,而是language_word
表中的五个(或任何其他数量)关联行。
答案 2 :(得分:0)
简单的解决方案是:
Select * from language where English = "Parrot"
OR French = "Parrot"
OR German = "Parrot"
OR Spanish = "Parrot"
OR Russian = "Parrot"
此解决方案可能缺乏可扩展性。如果您计划通过添加新列来扩展表,则可以编写自己的函数来执行搜索。
Here是一个示例存储过程,它在整个数据库中搜索指定的关键字,对您来说可能很有趣。
答案 3 :(得分:0)
在OR
旁边(我刚爱上find_in_set
)
select
find_in_set('Parrot',
concat(English, ',', French, ',', German, ',', Spanish, ',', Russian)
) as pos
from language
having pos<>0
列pos
可以指出哪种语言与搜索字词匹配。
然而,规范化是更好的解决方案
答案 4 :(得分:0)
MySQL不是AFAIK非常擅长优化OR,如果你决定在将来添加新语言,那么使用这种方法你的解决方案将不会很容易维护。
我肯定会将表格结构更改为标准化表格。