Php 仅选择一个线程和附件
我正在研究一种方法,通过一个附件(如果一个线程中发布了多个附件)从Php 仅选择一个线程和附件,php,mysql,Php,Mysql,我正在研究一种方法,通过一个附件(如果一个线程中发布了多个附件)从threads表中获取7个线程。我正在使用这个查询 查询: $query = $db->query(" SELECT a.thumbnail, t.tid, t.subject FROM ".TABLE_PREFIX."attachments a LEFT JOIN ".TABLE_PREFIX."posts p ON(p.pid=a.pid) LEFT JOIN ".TABLE_PREFIX
threads
表中获取7个线程。我正在使用这个查询
查询:
$query = $db->query("
SELECT a.thumbnail, t.tid, t.subject
FROM ".TABLE_PREFIX."attachments a
LEFT JOIN ".TABLE_PREFIX."posts p ON(p.pid=a.pid)
LEFT JOIN ".TABLE_PREFIX."threads t ON(t.tid=p.tid)
WHERE {$where_sql} {$visible}
ORDER BY a.dateuploaded ASC, t.tid DESC
LIMIT 7
");
它确实获取附件和线程,但问题是它获取一个线程的所有附件 有什么解决办法吗
其中条款:
if ($mybb->user['usergroup'] == "4")
{
$visible = " AND p.visible = '1' OR p.visible = '0'";
}
else
{
$visible = " AND p.visible = '1'";
}
$where_sql = "t.fid IN({$pdf_fid})";
require_once MYBB_ROOT."inc/functions_search.php";
$unsearchforums = get_unsearchable_forums();
if($unsearchforums)
{
$where_sql .= " AND t.fid NOT IN ($unsearchforums)";
}
$inactiveforums = get_inactive_forums();
if($inactiveforums)
{
$where_sql .= " AND t.fid NOT IN ($inactiveforums)";
}
$permsql = "";
$onlyusfids = array();
// Check group permissions if we can't view threads not started by us
$group_permissions = forum_permissions();
foreach($group_permissions as $fid => $forum_permissions)
{
if($forum_permissions['canonlyviewownthreads'] == 1)
{
$onlyusfids[] = $fid;
}
}
if(!empty($onlyusfids))
{
$where_sql .= "AND ((t.fid IN(".implode(',', $onlyusfids).") AND t.uid='{$mybb->user['uid']}') OR t.fid NOT IN(".implode(',', $onlyusfids)."))";
}
试试这个:
$QUERY = $db->QUERY("
SELECT thumbnail, tid, subject
FROM (SELECT a.thumbnail, t.tid, t.subject
FROM ".TABLE_PREFIX."attachments a
INNER JOIN ".TABLE_PREFIX."posts p ON(p.pid=a.pid)
INNER JOIN ".TABLE_PREFIX."threads t ON(t.tid=p.tid)
WHERE {$where_sql} {$visible}
ORDER BY t.tid DESC, a.dateuploaded DESC
) AS A
GROUP BY tid
LIMIT 7
");
实际上,您的工作非常完美,只需对
线程进行分组即可。试试这个:
$query = $db->query("
SELECT a.thumbnail, t.tid, t.subject
FROM ".TABLE_PREFIX."attachments a
LEFT JOIN ".TABLE_PREFIX."posts p ON(p.pid=a.pid)
LEFT JOIN ".TABLE_PREFIX."threads t ON(t.tid=p.tid)
WHERE {$where_sql} {$visible}
GROUP BY t.tid
ORDER BY t.dateline DESC, a.dateuploaded ASC
LIMIT 7
");
问题中的Where子句已发布。我不知道我在这里做错了什么。。?为什么有人否决了它??:sIt不按线程的发布日期排序,也不获取第一个发布的附件。@user2854563检查我的更新答案。按顺序改变顺序。这将解决我所说的更新答案沙阿拜的问题。它不会在DESC中排序线程,也不会获取最新上传的线程attachment@user2854563你能添加SQLFiddle演示并解释问题是什么吗?