Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.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_Sql_Search_Pagination - Fatal编程技术网

Php 如何在搜索结果中链接到主题的右侧页面?

Php 如何在搜索结果中链接到主题的右侧页面?,php,sql,search,pagination,Php,Sql,Search,Pagination,我有一个论坛的搜索功能,搜索结果将显示在10的时间。然后,用户可以查看下一个或前10个搜索结果。结果显示了不同的主题,在那里可以找到搜索到的单词。一切都像我希望的那样 问题是,我希望用户能够单击结果并最终显示在该主题的右侧页面上。例如,必须在第2页上使用主题页SQL查询中的限制10,10查看特定主题中的帖子nr 14。我将LIMIT参数作为$u GET发送到链接中 在按发布日期排序时,如何从特定主题的总数中检索结果中每个主题的行号?所有内容都始终按该顺序显示。我想使用$nr=$nr-1//然后

我有一个论坛的搜索功能,搜索结果将显示在10的时间。然后,用户可以查看下一个或前10个搜索结果。结果显示了不同的主题,在那里可以找到搜索到的单词。一切都像我希望的那样

问题是,我希望用户能够单击结果并最终显示在该主题的右侧页面上。例如,必须在第2页上使用主题页SQL查询中的限制10,10查看特定主题中的帖子nr 14。我将LIMIT参数作为$u GET发送到链接中

在按发布日期排序时,如何从特定主题的总数中检索结果中每个主题的行号?所有内容都始终按该顺序显示。我想使用$nr=$nr-1//然后

在该数字上,可以发送正确的限制参数,并在搜索结果中添加链接

以下是用于获取搜索结果的PDO:

$query = 'SELECT t.topic_id, t.topic_cat, t.topic_subject, p.post_content, p.post_id, UNIX_TIMESTAMP(p.post_date) AS post_date
FROM posts p 
LEFT JOIN topics t ON p.post_topic = t.topic_id 
WHERE p.post_content LIKE :search OR t.topic_subject LIKE :search ORDER BY UNIX_TIMESTAMP(p.post_date) DESC LIMIT :start, :size';
$statement = $db->prepare($query);
$statement->bindValue(':search', '%'.$search.'%');
$statement->bindValue(':start', $start2, PDO::PARAM_INT);
$statement->bindValue(':size', $pagesize, PDO::PARAM_INT);
$statement->execute();

    while ($row = $statement->fetch(PDO::FETCH_ASSOC)) {
        $array[$row['topic_subject']][] = $row['post_id'];
        $nr = count($array[$row['topic_subject']]) - 1;
        echo '<div class="search_result"><div class="search_topic"><a href="topic_view.php?id=' . $row['topic_id'] . '&amp;cat_id=' . $row['topic_cat'] . '
        &amp;start=' . floor($nr / 10) * 10 . '#anchor_' . $row['post_id'] . '">' . $row['topic_subject'] . '</a><span style="float:right;color:#696969">' 
        . date("M d, Y",$row['post_date']) . '</span></div><div class="search_post">' . $row['post_content'] . '</div></div>';
    }
} $statement->closeCursor();

它是链接中的开始参数,我需要在查询中以某种方式获取它,这样我就不必为while循环中的每个post_id进行新的DB调用。

假设您只知道post的id,我会这样做:

SELECT
    count(*)
FROM
    `posts`
WHERE
    date <= ( SELECT date FROM `posts` WHERE post_id = '$id' )
ORDER BY
    date DESC;
对于多个ID:

SELECT topic_id, (
    SELECT
        count(*)
    FROM
        `posts`
    WHERE
        date <= ( SELECT date FROM `posts` u1 WHERE u1.topic_id = u2.topic_id )
    ) AS row
FROM
    `posts` u2
WHERE
    topic_id IN ( '$id1', '$id2', '$id3' )
ORDER BY
    date DESC;
然后通过$start=$row['start']访问


正如你所说,我有个问题。我认为这个链接对你很有用

我已经成功地完成了这些工作,希望能对您有所帮助: 1.
2.

我不明白这个问题。你有行号,你想知道它将出现在哪一页?我有搜索结果中显示的每个帖子的id每个结果的标题都是主题,但是,为了能够将用户发送到该主题的右侧页面,我需要知道在LIMIT子句中使用哪个数字。我假设它必须在topic_id=“$topic_id”的位置?因为我需要主题中的帖子编号。但是我不是必须对每个搜索结果都进行查询吗?我想你只需要一个,我会在一分钟内重写。搜索结果显示为PDO:while$row=$statement->fetchPDO::FETCH_ASSOC{},因此如果能够通过在原始查询中加入一些额外的select,在每个结果集中包含正确的开始参数,那就太好了。@newInBusiness编辑的答案。对不起,这是我能想到的最好的办法了,不过我相信还有更好的办法。
$start = floor( $nr / 10 ) * 10;
$end = ceil( $nr / 10 ) * 10;
SELECT topic_id, (
    SELECT
        count(*)
    FROM
        `posts`
    WHERE
        date <= ( SELECT date FROM `posts` u1 WHERE u1.topic_id = u2.topic_id )
    ) AS row
FROM
    `posts` u2
WHERE
    topic_id IN ( '$id1', '$id2', '$id3' )
ORDER BY
    date DESC;
$query = 'SELECT :start as start, t.topic_id, t.topic_cat, t.topic_subject,
p.post_content, p.post_id, UNIX_TIMESTAMP(p.post_date) AS post_date
FROM posts p 
LEFT JOIN topics t ON p.post_topic = t.topic_id 
WHERE p.post_content LIKE :search OR t.topic_subject LIKE :search
ORDER BY UNIX_TIMESTAMP(p.post_date) DESC LIMIT :start, :size';
$nr = count($array[$row['topic_subject']])+$start - 1;