我有一个简单的查询,我不能为我的生活弄清楚。
我有一个表(简化)“消息”,其中包含列“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个?
答案 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;
}