3 조인이 개 테이블에서 PHP 출력하기 데이터

딘 :

당신이 도와 수 있기를 바랍니다,

내가 3 개 테이블이
문서
article_keywords_link의
키워드

그들은 함께 결합되고, 메신저 페이지에 표시 한 기사를 달성하지만, 기사에 링크 된 모든 관련 키워드를 표시하고자.

아직 메신저는 업무에 대한 기능을 얻으려고,이 페이지를 포맷하지 않았습니다.

SELECT article.article_id, article.article_title, article.article_content, keywords.keyword_name
FROM article
JOIN article_keyword_link ON article.article_id = article_keyword_link.article_id
INNER JOIN keywords ON article_keyword_link.keyword_id = keywords.keyword_id

phpMyAdmin에 위의 쿼리를 실행, 나는 이러한 결과를받을

Query Output from PhpmyAdmin
+------------+---------------+-------------------+--------------+
| article_id | article_title |  article_content  | keyword_name |
+------------+---------------+-------------------+--------------+
|          1 | Article 1     | Article 1 content | CCU          |
|          1 | Article 1     | Article 1 content | WIFI         |
|          1 | Article 1     | Article 1 content | Network      |
|          2 | Article 2     | Article 2 content | Passenger    |
|          2 | Article 2     | Article 2 content | Application  |
+------------+---------------+-------------------+--------------+

여기에 테이블이 채워집니다 방법입니다

Table: article
+------------+---------------+-------------------+
| article_id | article_title |  article_content  |
+------------+---------------+-------------------+
|          1 | Article 1     | Article 1 content |
|          2 | Article 2     | Article 2 content |
+------------+---------------+-------------------+
Table: article_keywords_link
+------------+------------+
| article_id | keyword_id |
+------------+------------+
|          1 |          1 |
|          1 |          2 |
|          2 |          3 |
|          2 |          4 |
|          1 |          7 |
+------------+------------+
Table: keywords
+------------+--------------+
| keyword_id | keyword_name |
+------------+--------------+
|          1 | CCU          |
|          2 | WIFI         |
|          3 | Passenger    |
|          4 | Application  |
|          5 | Software     |
|          6 | Hardware     |
|          7 | Network      |
+------------+--------------+

페이지 소스 :

<?php

include 'includes/db.php';

// Create connection
$conn = new mysqli($host, $username, $password, $database);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}

$sql = "

SELECT article.article_id, article.article_title, article.article_content, keywords.keyword_name
FROM article
JOIN article_keyword_link ON article.article_id = article_keyword_link.article_id
INNER JOIN keywords ON article_keyword_link.keyword_id = keywords.keyword_id

";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "Article ID: " . $row["article_id"] . "<br>";
        echo "Article Title: " . $row["article_title"] . "<br>";
        echo "Article Content: " . $row["article_content"] . "<br>"
;
    }
} else {
    echo "0 results";
}
$conn->close();
?>

페이지 출력 :

Article ID: 1
Article Title: Article 1
Article Content: Article 1 content
Article ID: 1
Article Title: Article 1
Article Content: Article 1 content
Article ID: 1
Article Title: Article 1
Article Content: Article 1 content
Article ID: 2
Article Title: Article 2
Article Content: Article 2 content
Article ID: 2
Article Title: Article 2
Article Content: Article 2 content

그래서 두 가지 문제에 직면가 메신저입니다.
1. 어떻게 그 기사에 관한 모든 키워드를 보여주는 동안 페이지에 표시 한 기사를 검색 할 수 있습니다?
2. 어떻게 키워드를 표시하기 위해 내 소스 코드를 조정할 수 있습니다? 내가 KEYWORD_NAME의 루프에 새로운 반향을 추가하는 경우, 페이지가로드되지 않습니다.

이것에 어떤 도움을 크게 감상 할 수있다

MHewison :

당신은 거의 다이 시도.

SELECT article.article_id, article.article_title, article.article_content, group_concat(keywords.keyword_name) as keywords
FROM article
JOIN article_keyword_link ON article.article_id = article_keyword_link.article_id
INNER JOIN keywords ON article_keyword_link.keyword_id = keywords.keyword_id
GROUP BY article.article_id

이 acheive하는 데 사용되는 기능에 대한 정보를 얻을 수 있습니다. 참조하시기 바랍니다.

https://dev.mysql.com/doc/refman/8.0/en/group-by-functions.html

당신은 단지 하나 개의 기사를 원하는 경우 또한 추가 limit 1쿼리의 끝. 당신은 최신을 원하는 경우 및 / 오래된 당신은 추가 할 ORDER BY article_id DESC LIMIT 1최신과 ORDER BY article_id ASC LIMIT 1최신을 위해

추천

출처http://10.200.1.11:23101/article/api/json?id=406272&siteId=1