【问题标题】:PHP Outputting data from 2 tables with 3 joinsPHP从具有3个连接的2个表中输出数据
【发布时间】:2020-07-16 16:42:40
【问题描述】:

希望你能帮忙,

我有 3 个表格
article
article_keywords_link
keywords

它们连接在一起,我想实现 1 篇文章显示在页面上,但显示链接到文章的所有相关关键字。

我还没有格式化这个页面,我只是想让功能正常工作。

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. 如何调整我的源代码以显示关键字?如果我在关键字名称的循环中添加新的回显,则页面不会加载。

对此的任何帮助将不胜感激

【问题讨论】:

    标签: php mysql join output relational


    【解决方案1】:

    你快到了,试试这个。

    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
    

    有关用于实现此目的的功能的信息。请看。

    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 最旧的

    【讨论】:

    • 所以我可以看到当我在 phpmyadmin 中运行它时,它显示了独特的文章,它对关键字进行了分组,当我把它放在源代码中并回显输出“关键字”时,它仍然在做同样的事情它不加载页面的地方
    • 得到这个工作,当我将它粘贴到源代码时出错。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2019-05-30
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-04
    • 1970-01-01
    相关资源
    最近更新 更多