起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: hjn090301

[结贴] 多表关联查询

[复制链接]
发表于 2017-3-3 17:43:52 | 显示全部楼层
hjn090301 发表于 2017-3-3 17:39
数据比较多,你说这个不太好实现,有没有其他方法。不能刷新完后,第二次刷新还在原来的基础上,或者怎么 ...

数据再多,也要把第一个data中,要显示的数据,关联的其他数据全部查出来啊!
否则没有这些数据!list怎么可能渲染出来!list能显示!说明前端data中数据是存在的才行!!
所以还是按照我的思路来吧!如果数据量大,第一个data分页显示!
其他data组件
data.setFilter('filter',"id in ('1','2','3')")  
设置过滤条件,符合第一页的数据全部加载放在data组件中!

这样才可以对这些数据进行处理的!!
意思就是list要显示这个数据,它就必须存在于data中才行!

否则,data刷新就会触发list更新!list数据不可能一直显示的!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

43

主题

159

帖子

345

积分

中级会员

Rank: 3Rank: 3

积分
345
QQ
 楼主| 发表于 2017-3-3 17:59:07 | 显示全部楼层
liangyongfei 发表于 2017-3-3 17:43
数据再多,也要把第一个data中,要显示的数据,关联的其他数据全部查出来啊!
否则没有这些数据!list怎 ...

list绑定data1,我需要把data1数据作为参数,找到相关data2的数据,然后再根据data2,查找data3,最后data3的数据内容显示到列表中,是类似这种的关联。所以按你的思路我不太明白怎么写和操作。
回复 支持 反对

使用道具 举报

发表于 2017-3-3 18:16:04 | 显示全部楼层
hjn090301 发表于 2017-3-3 17:59
list绑定data1,我需要把data1数据作为参数,找到相关data2的数据,然后再根据data2,查找data3,最后dat ...

1.我最推荐的做法是,使用多表关联查询!在后台一条sql语句,将符合条件的数据区别查询出来加载到一个data组件中! 建议拼接要显示的这个字段值!也直接sql就查出来了!不用在前端拼接,这样效率做高!
参考案例做法是:
http://docs.wex5.com/wex5-server-question-list-2012/

前端data 或baasData要自己定义列!手动编辑!

2.如果是你自己的思路!那就是在第一个data加载完后的事件中,设置过滤条件查询第二个data中的数据!,在第二个data组件数据加载完后的事件中,去查询第三个data组件中的数据!

3个data组件中都有数据了!,那么list显示就可以做到了!显示全部数据拼接的字符串了!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

43

主题

159

帖子

345

积分

中级会员

Rank: 3Rank: 3

积分
345
QQ
 楼主| 发表于 2017-3-6 16:39:32 | 显示全部楼层
liangyongfei 发表于 2017-3-3 18:16
1.我最推荐的做法是,使用多表关联查询!在后台一条sql语句,将符合条件的数据区别查询出来加载到一个dat ...

我按照做法1,自定义action sqlQuery。语句为:
select scn,hn,fn,dn,ad,sn,xwh.time from xwh left join xwdi on xwh.h=xwdi.h and xwfh.ln=xwdi.ln and xwh.ca=xwdi.ca left join xdi on xwdi.dc=xdi.rowid left join xwol on xwh.h=xwol.hn left join xwds on xwh.`status`=xwds.code left join hs on xwfol.scid=hs.scid left join xf on xdi.fd=xf.rowid
我在MySQL管理工具中测试,通过这个语句我把我需要的数据都查找出来了。但我把他定义为action,就不行了,我用浏览器浏览就报错。

三月 06, 2017 4:23:41 下午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet WeX5_Baas_Servlet threw exception
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LIMIT 0,20' at line 1
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:400)
        at com.mysql.jdbc.Util.getInstance(Util.java:383)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:980)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3847)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3783)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2447)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2594)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2545)
        at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1901)
        at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:2002)
        at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
        at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
        at com.justep.baas.data.DataUtils.queryData(Unknown Source)
        at com.justep.baas.action.CRUD.sqlQuery(Unknown Source)
        at waterPressure.FireAlarm__do.actionfireAlarminfo(FireAlarm__do.java:491)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:497)
        at com.justep.baas.action.Engine.execAction(Unknown Source)
        at com.justep.baas.action.Engine.execAction(Unknown Source)
        at com.justep.baas.servlet.BaasServlet.execService(Unknown Source)
        at com.justep.baas.servlet.BaasServlet.service(Unknown Source)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:745)

你说的 “将符合条件的数据区别查询出来加载到一个data组件中”是不是要我添加一个data组件,然后把查询到的数据加载进去。如果是,怎么加载啊,求指教。

123.png
回复 支持 反对

使用道具 举报

发表于 2017-3-6 17:00:09 | 显示全部楼层
hjn090301 发表于 2017-3-6 16:39
我按照做法1,自定义action sqlQuery。语句为:
select scn,hn,fn,dn,ad,sn,xwh.time from xwh left join ...

报错信息是语法错误!在limit附件,你自定义sql 又没有使用limit分页!所以,如果使用data组件的话 limit属性可以设置为 -1

1.关于自定义sql语句!建议你先把案例跑通了!data 或者 baasData访问自定义action没问题了!可以正常显示,然后你再参考它的做法!

2.data和 baasData都可以做!不过首先,列的定义,要和你的sql语句查寻是要匹配的!注意大小写,需要手动编辑列!
baasData的话,设置queryAction属性 为你自定义即可
data组件需要自己使用代码调用请求这个action ,自己接管onCustomRefresh事件 实现!

还是建议使用baasData 吧!因为baasData和 baasServer更匹配!
qq:1912779713
WeX5教程--WeX5下载
回复 支持 反对

使用道具 举报

43

主题

159

帖子

345

积分

中级会员

Rank: 3Rank: 3

积分
345
QQ
 楼主| 发表于 2017-3-7 08:55:40 | 显示全部楼层
liangyongfei 发表于 2017-3-6 17:00
报错信息是语法错误!在limit附件,你自定义sql 又没有使用limit分页!所以,如果使用data组件的话 limit ...

好了,可以正常显示了。之前是语法有点问题,还有baasdata的列定义错了,应该自定义,不应该基于数据表。谢谢大神的帮助,可以结贴了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2025-7-25 11:56 , Processed in 0.112414 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表