我必须做一个有很多访问权限的网站搜索引擎。此搜索必须在得到记录之前选择5个表的信息。
我可以将{5}查询作为SELECT * FROM table1 like ...
但是我想知道我是否可以使用VIEW来执行一个查询。 (为了获得更好的表现)
我已经检查了有关如何创建视图的信息,但是不太清楚如何进行查询以及如何操作返回的记录。
任何人都可以给我一个简单的例子,说明我应该如何创建(SQL语法)这个VIEW以及我将如何进行搜索查询。
关于表格作为示例:
Table 1 id | title | description
Table 2 id | name | tags
Table 3 id | name | address
Table 4 id | product | price
我需要检查所有字段。
此致
答案 0 :(得分:0)
视图不能返回多个结果集。如果您当前正在返回5个不同的结果集,每个select语句一个,那么View将无法帮助您。
如果您可以将结果集合并为一个,如下所示,那么View将有所帮助:
select title as col1 , description as col2 from table1
union
select name as col1 , tags as col2 from table2
union
select name as col1 , address as col2 from table3
union
select product as col1 , price as col2 from table4
注意:如果price
与description, tags
和address
分别与table1, table2,
和table3
的数据类型不同,您可能需要将其转换为与其他表中的其他列相同的数据类型。我不确定MySQL在这种情况下使用的强制是什么,但为了安全起见,我会施展它。
在MySQL视图上创建如下:
CREATE VIEW test.v AS
select title as col1 , description as col2 from table1
union
select name as col1 , tags as col2 from table2
union --... etc
然后你可以像使用常规表一样查询它;例如:select col1, col2 from view_name where <condition>
如果您无法在一个结果集中组合所有内容,则可以使用stored procedure。只需编写一个按顺序运行5个select语句的存储过程,然后从前端调用它,我想,某种搜索参数。有关如何调用此存储过程的详细信息取决于您使用的语言/技术。
答案 1 :(得分:0)
看起来5个表完全不相关 - 它们不是创建视图的好选择。为了使视图起作用,您需要所有表中的所有列都具有相似的数据类型,并且可能“price”是一个数字列,而其他列是varchar的变种。
当然,你可以操纵视图中的“选择”来修改它,但最后你会得到一个毫无意义的视图。
例如(没有检查语法,我的上网本没有SQL)
create view SEARCH_VIEW
as
select 'T1' as source, id, title, description
from t1
union
select 'T2' as source, id , name, tags
from t2
union
select 'T3' as source, id, name, address
from t3
union
select 'T4', id, product, convert(varchar, price)
from t4
但是结果表没有任何意义。
我会留下单独的查询;这也允许您做出关于相关性的决定(例如,“名称”中的命中可能比“标签”更相关)。
最后,如果要对大型表进行文本搜索,可能需要查看自由文本索引。