PHP salida de datos de 2 mesas con 3 une

Dean:

esperamos que usted puede ayudar,

Tengo 3 tablas
artículo
article_keywords_link
palabras clave

Ellos se unen entre sí, y estoy con ganas de lograr 1 artículo para su visualización en la página, pero le mostrará todas las palabras clave relacionadas que está relacionado con el artículo.

Todavía no he formateado esta página, im tratando de obtener la funcionalidad para el trabajo.

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

Ejecución de la consulta anterior en Phpmyadmin, que recibo estos resultados

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  |
+------------+---------------+-------------------+--------------+

Aquí es cómo se llenan las tablas

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      |
+------------+--------------+

Fuente de la página:

<?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();
?>

resultado de la página:

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

Así que hay dos problemas IM frente.
1. ¿Cómo puedo recuperar un solo artículo a la visualización de la página, mientras que muestra todas las palabras clave relacionadas con ese artículo?
2. ¿Cómo puedo ajustar mi código fuente para mostrar las palabras clave? Si añado un nuevo eco en el bucle de KEYWORD_NAME, la página no se carga.

Cualquier ayuda con esto sería muy apreciada

MHewison:

Ya casi ha terminado, prueba esto.

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

para obtener información sobre las funciones que se utilizan para lograr esto. por favor mira.

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

Además, si lo que desea es un artículo se agrega limit 1al final de la consulta. y si desea que el más reciente / más antigua, deberá añadir ORDER BY article_id DESC LIMIT 1para más nuevo y ORDER BY article_id ASC LIMIT 1de más reciente

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=406277&siteId=1
Recomendado
Clasificación