ディーン:
あなたが役立つことを願って、
私は3つのテーブルを持っている
記事
article_keywords_linkの
キーワードを
彼らは一緒に結合され、そしてイムは、ページ上の表示に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.はどのようなキーワードを表示するには、私のソースコードを調整することができますか?私は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
、最新のために