ZF 1 Mysql WHERE IN查询

时间:2013-09-23 02:56:42

标签: php mysql zend-framework greatest-n-per-group

我有一个简单的查询,我不能为我的生活弄清楚。

我有一个表(简化)“消息”,其中包含列“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个?

2 个答案:

答案 0 :(得分: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 fiddle

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

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

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

How do I select multiple items from each group in a mysql query?
How to SELECT the newest four items per category?
Retrieving the last record in each group

答案 1 :(得分:0)

不是一个好的解决方案,但可以解决你的问题,创建sub-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;
}