一对多查询的疑问

#1 slyjit

user 用户表
user_id int 用户ID 自增/主键
user_name varchar(50) 用户名 唯一
guestbook 留言表
gb_id int 留言ID 自增/主键
contents varchar(255) 留言内容
user_id int 对应的用户ID
creates varchar  留言时间

我在留言表新增加了个字段creates;
现在我想查询的数据是:user表里面user_id=1的 留言时间是在今日10点至11点的留言
实现:通过修改user表的模型添加:
      var $linker = array(
                array(
                        'type' => 'hasmany',   // 一对多关联
              'map' => 'guestbook',    // 关联的标识              'mapkey' => 'user_id',               'fclass' => 'guestbook',              'fkey' => 'user_id',                        'condition' => 'creates >= 1433142879 AND creates < 1433142880',
                        'enabled' => true
                ),
        );
这样就可以实现了,但我有可能查询当日10点至11点的留言  也有可能会查11点至12点的留言,时间段不固定,这个要如何动态传值呢?




jake论坛验证码太坑了,用汉字做验证码还是百度的方法比较好  用两个词组,你这两个不相关的字  真是麻烦打

2015-06-02 14:19:04

#2 slyjit

哎呀 关联数组乱了
var $linker = array(
                array(
                       'type' => 'hasmany',   // 一对多关联
              'map' => 'guestbook',    // 关联的标识              
'mapkey' => 'user_id',            
  'fclass' => 'guestbook',            
'fkey' => 'user_id',                       
'condition' => 'creates >= 1433142879 AND creates < 1433142880',
'enabled' => true
               ),
      );

2015-06-02 14:20:49

#3 slyjit

$business_model = spClass('user');
$linker = $business_model->linker;
$linker[0]['condition'] = 'creates >= '.$start.' AND creates < '.$end;
$business_model->linker = $linker;
解决了  这样写 可以实现;不知道还有没有别的好法子

2015-06-02 14:39:19

#4 slyjit

发现个问题  我打印sql语句的时候 :
SELECT * FROM guestbook WHERE user_id = 'D013345' AND creates >= 1427817600 AND creates < 1430409600 ORDER BY id  ;
如果我想一次性将user表的用户都查询出来,并且也查出对应的留言,SP框架是不是通过遍历user的数据  然后再组织如上的SQL语句再查询留言?如果是这样的话  user表的数据少还好说  如果达到一定数量级,那么会不会对mysql造成很大的压力啊?

2015-06-02 14:47:00

#5 jake

slyjit 发表于 2015-6-2 14:47
发现个问题  我打印sql语句的时候 :
SELECT * FROM guestbook WHERE user_id = 'D013345' AND creates >=  ...
1. 关联上面你做对了,就是这个方法。
2. 其实我更推荐做复杂,或大数据的关联,直接用join之类的SQL语句直接查,一般现在大系统也都是那样的,好处是意图明显,而且维护简单,优化也简单。

3. discuz论坛就只有这种验证码,也是比较靠谱的,木有什么好办法。发超过5贴就不用验证码了~~~

2015-06-02 15:45:31

#6 slyjit

jake 发表于 2015-6-2 15:45
1. 关联上面你做对了,就是这个方法。
2. 其实我更推荐做复杂,或大数据的关联,直接用join之类的SQL语句 ...
长远考虑  改为sql语句写了

2015-06-02 16:36:03