php+view+查询,sqlite view定义查询页面

下面想象一个这样的场景,你的数据库有一个表中储存有用户信息,姑且称为user表。

.schema user

CREATE TABLE user(id integer,name text,telphone text,unique(id));   表user中储存有 id: 相当于用户的实际ID,唯一

name: 用户的用户名,供显示或者登录的时候使用

telphone:一个附加信息,电话号码

一般我们程序中还会有一个储存用户数据的表,这里引用为data表,里面储存的是一些用户数据,完全可以自定义。在多用户的情况下我们一般会添加一个字段user_id来表示这个数据的所属用户。

.schema data

CREATE TABLE data(message text,time datetime,user_id integer);   这是一个简单的场景,现在我们的需求是 提供一个用户界面,可以显示出 姓名,时间,信息

我们需要怎么做呢,(这里不提我曾经见过的一个中规模程序中逻辑控制拼接这些信息的了,代码冗余且丑陋,性能更不用提~)

我们在数据库中创建一个view来解决(引用为view1):

.schema view1

CREATE VIEW view1 as select (select name from user where id=data.user_id) as name,time,message from data; 查询view1的方式与查询table一样,view与table的区别就是view只可以执行查询的操作,不能执行插入,更新数据等操作,因为view不对应实际的物理内存,只是一个预定义的查询语句而已。

现在我往user与data表中插入了一些数据

sqlite> select * from user;

1|文文|100

2|清清|100

sqlite> select * from data;

data1|2014-12-08 11:19:19|1

data2|2014-12-08 11:19:23|1

data3|2014-12-08 11:19:27|1

data4|2014-12-08 11:19:30|1

data5|2014-12-08 11:19:34|1

data1|2014-12-08 11:19:39|2

data2|2014-12-08 11:19:42|2

data3|2014-12-08 11:19:45|2

data4|2014-12-08 11:19:49|2

data5|2014-12-08 11:19:52|2 现在查询view1的结果是

sqlite> select * from view1;

文文|2014-12-08 11:19:19|data1

文文|2014-12-08 11:19:23|data2

文文|2014-12-08 11:19:27|data3

文文|2014-12-08 11:19:30|data4

文文|2014-12-08 11:19:34|data5

清清|2014-12-08 11:19:39|data1

清清|2014-12-08 11:19:42|data2

清清|2014-12-08 11:19:45|data3

清清|2014-12-08 11:19:49|data4

清清|2014-12-08 11:19:52|data5

达到了合并两张表的效果。在数据库中定义好之后可以直接查询这个视图(视图储存在数据库中)。 当然这个可以作为查询历史数据用,view还可以有更好的更强大的方式去显示。

比如下面这个场景:

你程序中有个页面是获取当前每个用户最新的一个记录显示。程序后台将数据源源不断地存进数据库,前台固定频率查询最新的一条数据来显示,可以说是实时显示的意思。

创建一个视图(引用为view2)

.schema view2

create view view2 as select (select name from user where id=data.user_id) as name,max(time),message from data group by user_id;

sqlite> select * from view2;

文文|2014-12-08 11:19:34|data5

清清|2014-12-08 11:19:52|data5     这样就做成了一张实时最新的数据表单,可以供用户查看实时数据。

当然不必把任何显示的数据都预先做成view 比如排序,筛选等,也可以做成一个view后再执行相应的查询操作。

预先做成的view 可以直接作为 c#或者QT里的 tablecontrol/tableview 数据源来使用,极大地减少了程序的复杂度,提升了效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值