1

我有一个简单的查询,我一生都无法弄清楚。

我有一个包含“thread_id”和“messages”列的表(简化)“消息”

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

$list = "1,2,3,4";

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

但这仅限制总数中的 10 个,我将如何在 ZF 1.11 查询方法中的每个 thread_id 中执行 10 个?

4

2 回答 2

3

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

 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);

我创建了一个SQL 小提琴

query您也可以使用该方法 在 aend 中执行它。

$stmt = $db->query($sql);
$result = $stmt->fetchAll();

这是经典的“每组 N 个”类型查询。您可以从这些帖子中获得更多详细信息

如何在 mysql 查询中从每个组中选择多个项目?
如何选择每个类别最新的四个项目?
检索每个组中的最后一条记录

于 2013-09-23T05:22:28.530 回答
0

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

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;
}
于 2013-09-23T03:19:38.860 回答