PHP - Mostrar consulta de dos tablas diferentes

 
Vista:
sin imagen de perfil
Val: 9
Ha aumentado su posición en 15 puestos en PHP (en relación al último mes)
Gráfica de PHP

Mostrar consulta de dos tablas diferentes

Publicado por Mauricio (4 intervenciones) el 08/10/2020 11:26:16
Antes que nada, soy nuevo en esto y aprendiendo estoy. Y por supuesto muchas gracias por el tiempo y la ayuda de antemano.

Tengo un problema para mostrar los datos de de dos tablas. Una tabla es de categorías (category) y otra es de publicaciones (post).

En la misma página debo mostrar primero unos botones que muestran cada categoría (y que el usuario puede editar con un CRUD) por lo tanto aparecen de acuerdo a la creación del usuario y tendría que traer de allí el nombre de la categoría.

En la misma página inmediatamente abajo, por un id deben aparecer los posts de cada categoría de acuerdo al #id de cada botón.

Problema: Puedo mostrar las categorias en los botones o puedo mostrar las publicaciones, pero al combinar las funciones en la misma página todo desaparece.

El código lo muestro a continuación:

PHP: para traer cada categoria


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
function categories(){
 
    require_once('resources/connection.php');
 
    $stmt = $con->prepare("SELECT name FROM category");
 
    $stmt->execute();
 
    $stmt->store_result();
 
    if($stmt->num_rows > 0){
 
        $stmt->bind_result($name);
 
        while($stmt->fetch()){
 
            echo '
            <a class="nav-link py-3 px-4" id="v-pills-cafes-tab" data-toggle="pill" href="#v-pills-'.$name.'" role="tab" aria-controls="v-pills-cafes" aria-selected="true"><span class="flaticon-meat"></span>'.$name.'</a>
            ';
 
        }
 
        echo '';
 
    }
 
    else{
 
        echo '
        ';
 
    }
 
    $stmt->free_result();
 
    $stmt->close();
 
    $con->close();
 
}

--------------------------------------------------------------

PHP para traer los posts


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
function AllPosts(){
 
    require_once('resources/connection.php');
 
    $active = true;
 
    $stmt = $con->prepare("SELECT id, category, title, created_by, created_at, post, price, image FROM posts WHERE active = ? ORDER BY created_at DESC");
 
    $stmt->bind_param("s", $active);
 
    $stmt->execute();
 
    $stmt->store_result();
 
    if($stmt->num_rows > 0){
 
        $stmt->bind_result($id, $category, $title, $created_by, $created_at, $post, $price, $image);
 
        while($stmt->fetch()){
 
            $post = substr($post, 0, 200);
 
            $post = substr($post, 0, strrpos($post, ' ')).'...<a href="post.php?post='.$id.'">Leer más</a>';
 
            echo '
          <div class="col-lg-6">
            <div class="menus d-flex ftco-animate">
              <div class="menu-img" style="background-image: url('.$image.');"></div>
              <div class="text d-flex">
                <div class="one-half">
                  <h3>'.$title.'</h3>
                  <p><span>'.$post.'</span></p>
                </div>
                <div class="one-forth">
                  <span class="price">'.$price.'€</span>
                </div>
              </div>
            </div>
          </div>
            ';
 
        }
 
    }
 
    else{
 
        echo '
        ';
 
    }
 
    $stmt->free_result();
 
    $stmt->close();
 
    $con->close();
 
}

-------------------------------------------

Datos de la base

Tabla category:

columnas: id/name/description/active

Tabla posts:

columnas: id/category/title/post/price

(name de category y category de post coinciden)
-------------------------------------------------------

Código HTML donde debe aparecer


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<div class="nav nav-pills justify-content-center ftco-animate" id="v-pills-tab" role="tablist" aria-orientation="vertical">
 
  <a class="nav-link py-3 px-4 active" id="v-pills-home-tab" data-toggle="pill" href="#v-pills-home" role="tab" aria-controls="v-pills-home" aria-selected="true"><span class="flaticon-meat"></span> Main</a>
 
  <a class="nav-link py-3 px-4" id="v-pills-profile-tab" data-toggle="pill" href="#v-pills-profile" role="tab" aria-controls="v-pills-profile" aria-selected="false"><span class="flaticon-cutlery"></span> Dessert</a>
 
  <a class="nav-link py-3 px-4" id="v-pills-messages-tab" data-toggle="pill" href="#v-pills-messages" role="tab" aria-controls="v-pills-messages" aria-selected="false"><span class="flaticon-cheers"></span> Drinks</a>
 
</div>
 
<div class="tab-content py-5" id="v-pills-tabContent">
 
  <div class="tab-pane fade show active" id="v-pills-home" role="tabpanel" aria-labelledby="v-pills-home-tab">
 
    <div class="row">
 
      <div class="col-lg-6">
 
        <div class="menus d-flex ftco-animate">
 
          <div class="menu-img" style="background-image: url(images/dish-3.jpg);"></div>
 
          <div class="text d-flex">
 
            <div class="one-half">
 
              <h3>Grilled Beef with potatoes</h3>
 
              <p><span>Meat</span>, <span>Potatoes</span>, <span>Rice</span>, <span>Tomatoe</span></p>
 
            </div>
 
            <div class="one-forth">
 
              <span class="price">$29</span>
 
            </div>
 
          </div>
 
        </div>
 
      </div>
 
    </div>
 
  </div>

-------------------------------------------
Estar'e muy agradecido si alguien puede ayudarme y disculpas si aún no sé explicarme bien. Pero como he dicho estoy aún gateando en este tema.

Saludos!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
1
Responder
sin imagen de perfil
Val: 9
Ha aumentado su posición en 15 puestos en PHP (en relación al último mes)
Gráfica de PHP

Mostrar consulta de dos tablas diferentes

Publicado por Mauricio (4 intervenciones) el 08/10/2020 22:42:42
Buenas noches, no sé si corresponde autocontestarme, pero por si alguien alguna vez tiene el mismo problema.
La solución la encontré creando una función y crear en ella un botón con un campo hidden. Y enviar por el método get la información que permite hacer aparecer la tabla. Combinando ambas tablas con INNER JOIN.
Posiblemente me expreso mal, porque me hacen falta muchos conceptos. Así que seguramente alguien con más experiencia puede mejorar mi explicación.
De todos modos muchas gracias y os dejos aquí el código.
Saludos!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
<div class="row">
      <div class="col-md-12 dish-menu">
        <div class="nav nav-pills justify-content-center ftco-animate" id="v-pills-tab" role="tablist" aria-orientation="vertical">
 
          <?php
          require_once('resources/connection.php');
 
          $stmt = $con->prepare("SELECT name FROM category");
          $stmt->execute();
          $stmt->store_result();
 
          if($stmt->num_rows > 0){
              $stmt->bind_result($name);
              while($stmt->fetch()){
                  echo '
                  <form method="GET">
                      <input name="curso" type="hidden" class="form-control mb-2" id="inlineFormInput" value="'.$name.'">
                      <input name="buscar" type="hidden" class="form-control mb-2" id="inlineFormInput" value="v">
                      <button type="submit" id="#v-pills-cafes" class="btn btn-primary btn-lg m-2 ">'.$name.'</button>
                  </form>
                  ';
                }
          }
          ?>
        </div> <!-- END -->
        <div class="tab-content py-5" id="v-pills-tabContent">
          <div class="tab-pane fade show active" id="v-pills-cafes" role="tabpanel" aria-labelledby="v-pills-cafes-tab">
            <div class="row">
              <?php
                require_once('resources/connection.php');
 
                if(isset($_GET["curso"])){
                $pbu=$_GET["curso"];
                  }
 
                if(isset($_GET["buscar"])){
                $sqln=mysqli_query($con, "SELECT t1.id, t1.title, t1.post, t1.price, t1.image, t2.name FROM posts t1 INNER JOIN category t2 ON t1.id_category=t2.id_category WHERE t2.name LIKE '%$pbu%' order by t1.id desc") or die(mysqli_error());
                }
                ?>
                <?php
                  if(isset($_GET["buscar"])){
                  $n=0;
                  while ($dato=mysqli_fetch_array($sqln))
                  {	$n++;
 
                  echo'
                      <div class="col-lg-6">
                          <div class="menus d-flex ftco-animate">
                            <div class="menu-img" style="background-image: url('.$dato['image'].');"></div>
                            <div class="text d-flex">
                              <div class="one-half">
                                <h3>'.$dato['name'].'</h3>
                                <p><span>'.$dato['post'].'</span></p>
                              </div>
                              <div class="one-forth">
                                <span class="price">'.$dato['price'].' €</span>
                              </div>
                            </div>
                          </div>
                        </div>
                      ';
                  }
                  }
                  ?>
            </div>
          </div><!-- END -->
        </div>
      </div>
    </div>
  </div>
</section>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar