Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 仅选择一个线程和附件_Php_Mysql - Fatal编程技术网

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演示并解释问题是什么吗?