我有一个简单的查询,我一生都无法弄清楚。
我有一个包含“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 个?
我有一个简单的查询,我一生都无法弄清楚。
我有一个包含“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 个?
您可以使用此查询获得所需的结果
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 个”类型查询。您可以从这些帖子中获得更多详细信息
不是一个好的解决方案,但可以解决您的问题,创建子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;
}