2013-09-23 2 views
1

나는 내 인생을 생각할 수없는 간단한 쿼리를 가지고있다.ZF 1 쿼리에서 WHERE IN

나는 나는 각 10 개 결과를 필요로 나는 또한 스레드의 목록을 테이블 (간체) 열 "thread_id"와 "메시지"와 "메시지"

있습니다.

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

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

할 것이라고하지만 그 개 가운데 10 제한, 어떻게 1.11 쿼리 방법은 ZF 각 thread_id의 10 할 것?

답변

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'유형의 전형적인 쿼리입니다. 당신은 내가 $ 목록에 8 개 이상의 기록이있을 수 있기 때문에 멀리 연합 (EU)에서 유지하기 위해 노력하고있어, 도움을 감사합니다이 게시물

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

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; 
} 
+0

에서 자세한 정보를 얻을 수 있습니다. – Darius

+0

데이터가 실시간 정보가 아닌 경우 batchjob으로 테이블에 플래그를 지정할 수 있습니다 (상위 10 개 또는 시퀀스) SQL 구문 단순화. 하지만 thread_id는 보이지 않는데, 나는 조합을 사용하지 않는다. 미안하지만 너를 도울 수 없어. – sheauren

+0

노력을 감사하십시오. 그것은 실시간 데이터입니다 : \ Thank you – Darius