Php ZF 1 Mysql在查询中的位置

Php ZF 1 Mysql在查询中的位置,php,mysql,zend-framework,greatest-n-per-group,Php,Mysql,Zend Framework,Greatest N Per Group,我有一个简单的问题,我一辈子都搞不懂 我有一个表(简化的)“messages”,其中包含“thread_id”和“messages”列 我还有一个线程列表,每个线程需要10个结果 $list=“1,2,3,4” 我会做$db->select()->from(“messages”)->where(“thread_id IN(“?”)”,$list)->limit(10) 但这只限制了总数中的10个,在ZF 1.11查询方法中,我如何处理每个线程id中的10个?不是一个好的解决方案,但可以解决您的问

我有一个简单的问题,我一辈子都搞不懂

我有一个表(简化的)“messages”,其中包含“thread_id”和“messages”列

我还有一个线程列表,每个线程需要10个结果

$list=“1,2,3,4”

我会做
$db->select()->from(“messages”)->where(“thread_id IN(“?”)”,$list)->limit(10)


但这只限制了总数中的10个,在ZF 1.11查询方法中,我如何处理每个线程id中的10个?

不是一个好的解决方案,但可以解决您的问题,创建子sql和union

try{
    $db =  Zend_Db_Table::getDefaultAdapter();
    $sql=array();
    $idAry=explode(',',$list);
    for($i=0;$i<count($idAry){
        array_push($sql," SELECT * FROM ".$this->_name." where thread_id = ".$idAry[$i]." limit 10 ");
    }   
    $stmt = $db->query(implode(' union ',$sql););
    $result = $stmt->fetchAll();
    return $result;
}
catch(Exception $ex){
    print_r($ex);
    exit;
}
试试看{
$db=Zend_db_Table::getDefaultAdapter();
$sql=array();
$idAry=分解(“,”,$list);
对于($i=0;$i_name.“where thread_id=”.$idAry[$i]。“limit 10”);
}   
$stmt=$db->query(内爆('union',$sql););
$result=$stmt->fetchAll();
返回$result;
}
捕获(例外$ex){
印刷品(港币);;
出口
}

您可以使用此查询获得所需的结果

 SELECT * FROM 
    (SELECT i1.*
    FROM threadmessage i1
    LEFT JOIN threadmessage i2
      ON (i1.threadid = i2.threadid 
          AND i1.messageid < i2.messageid 
         )
    GROUP BY i1.messageid
    HAVING COUNT(*) < 5
    ORDER BY i1.messageid) A
WHERE A.threadid IN (3,4);
这是典型的“每个组N”类型查询。你可以从这些帖子中获得更多细节




感谢您的帮助,我正试图远离Union,因为$list中可能有8条以上的记录。如果数据不是实时信息,您可以通过batchjob标记(前10条或顺序)表,简化sql语法。但我似乎不知道,我不知道不使用union。对不起,我帮不了你。谢谢你的努力。这是实时数据:\n谢谢
$stmt = $db->query($sql);
$result = $stmt->fetchAll();