PHP는 지식질문답 사이트에서 태그 클라우드와 주제 집계 기능을 구현합니다
지식 질문답변 웹사이트에서는 태그 클라우드와 주제 집계 기능이 두 가지 중요한 기능입니다. 태그 클라우드는 사용자가 웹사이트의 인기 주제와 공통 태그를 빠르게 이해하도록 도와줌으로써 사용자가 관련 질문과 답변을 더 쉽게 찾아보고 검색할 수 있도록 해줍니다. 주제 집계를 통해 동일한 태그로 질문과 답변을 그룹화할 수 있으므로 사용자가 보다 편리하게 보고 토론할 수 있습니다. 아래에서는 PHP를 사용하여 이 두 가지 기능을 구현하겠습니다.
먼저 질문, 답변, 태그 데이터를 저장할 데이터베이스를 만들어야 합니다. 질문, 답변, 태그라는 세 개의 테이블이 있는 "qa"라는 데이터베이스를 만들 수 있습니다.
질문 테이블의 구조는 다음과 같습니다.
CREATE TABLE `questions` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) DEFAULT '', `content` text, `date` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
답변 테이블은 다음과 같습니다.
CREATE TABLE `answers` ( `id` int(11) NOT NULL AUTO_INCREMENT, `question_id` int(11) DEFAULT NULL, `content` text, `date` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
tags 테이블은 다음과 같습니다.
CREATE TABLE `tags` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(255) DEFAULT '', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
다음으로 질문 페이지와 답변 페이지에 태그 선택 상자를 추가해야 합니다. 지식 질문 및 답변 웹 사이트를 만들고 사용자가 선택한 태그를 질문 또는 답변과 연결합니다.
<!-- 提问页面 --> <form action="post_question.php" method="post"> <label for="title">问题标题:</label> <input type="text" name="title" id="title"><br> <label for="content">问题内容:</label> <textarea name="content" id="content"></textarea><br> <label for="tags">标签:</label> <select name="tags[]" id="tags" multiple> <option value="php">PHP</option> <option value="javascript">JavaScript</option> <option value="html">HTML</option> <!-- 其他标签选项 --> </select><br> <input type="submit" value="提交问题"> </form> <!-- 回答页面 --> <form action="post_answer.php" method="post"> <label for="content">回答内容:</label> <textarea name="content" id="content"></textarea><br> <label for="tags">标签:</label> <select name="tags[]" id="tags" multiple> <option value="php">PHP</option> <option value="javascript">JavaScript</option> <option value="html">HTML</option> <!-- 其他标签选项 --> </select><br> <input type="submit" value="提交回答"> </form>
그런 다음 질문 또는 답변과 관련된 태그 데이터를 백그라운드 질문 제출 핸들러(post_question.php) 및 답변 제출 핸들러(post_answer.php)의 데이터베이스에 저장해야 합니다.
// post_question.php // 获取用户提交的问题数据 $title = $_POST['title']; $content = $_POST['content']; $tags = $_POST['tags']; // 插入问题数据到 questions 表中 // 获取最后插入的问题的id $question_id = mysqli_insert_id($conn); // 插入标签数据到 tags 表中 foreach ($tags as $tag) { $sql = "INSERT INTO tags (title) VALUES ('$tag')"; mysqli_query($conn, $sql); // 获取最后插入的标签的id $tag_id = mysqli_insert_id($conn); // 插入问题和标签的关联到 question_tag 表中 $sql = "INSERT INTO question_tag (question_id, tag_id) VALUES ($question_id, $tag_id)"; mysqli_query($conn, $sql); } // post_answer.php // 获取用户提交的回答数据 $content = $_POST['content']; $tags = $_POST['tags']; // 插入回答数据到 answers 表中 // 获取最后插入的回答的id $answer_id = mysqli_insert_id($conn); // 插入标签数据到 tags 表中 foreach ($tags as $tag) { $sql = "INSERT INTO tags (title) VALUES ('$tag')"; mysqli_query($conn, $sql); // 获取最后插入的标签的id $tag_id = mysqli_insert_id($conn); // 插入回答和标签的关联到 answer_tag 表中 $sql = "INSERT INTO answer_tag (answer_id, tag_id) VALUES ($answer_id, $tag_id)"; mysqli_query($conn, $sql); }
이제 사용자가 선택한 태그를 질문 및 답변과 성공적으로 연결했습니다. 다음으로는 태그 클라우드와 주제 집계 기능을 구현하겠습니다.
먼저 모든 태그와 태그 발생 횟수를 가져오는 PHP 함수를 작성해야 합니다.
function getTagsCloud() { global $conn; // 查询所有标签及其出现次数 $sql = "SELECT title, COUNT(*) AS count FROM tags GROUP BY title"; $result = mysqli_query($conn, $sql); $tagsCloud = array(); while ($row = mysqli_fetch_assoc($result)) { $tagsCloud[$row['title']] = $row['count']; } return $tagsCloud; }
그런 다음 프런트 엔드 페이지에서 이 기능을 사용하여 태그 클라우드를 표시할 수 있습니다.
<?php // 获取标签云数据 $tagsCloud = getTagsCloud(); ?> <!-- 标签云 --> <div class="tag-cloud"> <?php foreach ($tagsCloud as $tag => $count): ?> <a href="search.php?tag=<?php echo $tag; ?>"><?php echo $tag; ?></a> <?php endforeach; ?> </div>
드디어 주제 집계 기능, 즉 태그를 기반으로 관련 질문과 답변을 쿼리하는 기능을 구현할 수 있습니다.
function getQuestionsByTag($tag) { global $conn; // 根据标签获取问题 $sql = "SELECT q.id, q.title, q.date, COUNT(*) AS answersCount FROM questions q INNER JOIN question_tag qt ON q.id = qt.question_id INNER JOIN tags t ON t.id = qt.tag_id WHERE t.title = '$tag' GROUP BY q.id"; $result = mysqli_query($conn, $sql); $questions = array(); while ($row = mysqli_fetch_assoc($result)) { $questions[] = $row; } return $questions; } function getAnswersByTag($tag) { global $conn; // 根据标签获取回答 $sql = "SELECT a.id, a.content, a.date, q.title FROM answers a INNER JOIN answer_tag at ON a.id = at.answer_id INNER JOIN tags t ON t.id = at.tag_id INNER JOIN questions q ON q.id = a.question_id WHERE t.title = '$tag'"; $result = mysqli_query($conn, $sql); $answers = array(); while ($row = mysqli_fetch_assoc($result)) { $answers[] = $row; } return $answers; }
주제 세부정보 페이지에서 위 두 가지 기능을 사용하여 관련 질문과 답변을 표시할 수 있습니다.
<?php // 获取标签名称 $tag = $_GET['tag']; // 获取话题相关的问题和回答数据 $questions = getQuestionsByTag($tag); $answers = getAnswersByTag($tag); ?> <!-- 话题相关的问题 --> <?php foreach ($questions as $question): ?> <div class="question"> <h3><?php echo $question['title']; ?></h3> <p>回答数量: <?php echo $question['answersCount']; ?></p> <!-- 其他问题信息展示 --> </div> <?php endforeach; ?> <!-- 话题相关的回答 --> <?php foreach ($answers as $answer): ?> <div class="answer"> <h4><?php echo $answer['title']; ?></h4> <p><?php echo $answer['content']; ?></p> <!-- 其他回答信息展示 --> </div> <?php endforeach; ?>
위 코드 예시를 통해 지식 질의응답 사이트에 태그 클라우드와 주제 집계 기능을 성공적으로 구현했습니다. 사용자는 핫 토픽과 관련 질문과 답변을 쉽게 탐색할 수 있습니다. 동시에 독자가 코드 구현 아이디어를 더 잘 이해할 수 있도록 해당 데이터베이스 작업 예제도 제공합니다. 이 글이 도움이 필요한 독자들에게 도움이 되기를 바랍니다.
위 내용은 PHP는 지식 질문과 답변 웹사이트에 태그 클라우드와 주제 집계 기능을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!