PHP - Problema con select (HTML) e inner join (PHP)

 
Vista:
Imágen de perfil de jose
Val: 184
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problema con select (HTML) e inner join (PHP)

Publicado por jose (71 intervenciones) el 01/02/2021 16:56:33
Buenas tardes,

Necesito una ayuda con un combobox de php. Tengo dos tablas una de llamada tipo_mantenimiento y otra llamada mantenimiento.

Ambas están relacionadas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
CREATE TABLE `tipo_mantenimiento` (
 `id` smallint(11) NOT NULL AUTO_INCREMENT,
 `tipo` varchar(25) NOT NULL,
 PRIMARY KEY (`id`)
)
 
 
CREATE TABLE `mantenimientos` (
 `id` smallint(11) NOT NULL AUTO_INCREMENT,
 `tipo` smallint(11) NOT NULL,
 `vehiculo` smallint(11) NOT NULL,
 `fecha` date NOT NULL DEFAULT current_timestamp(),
 `odometro` int(11) DEFAULT NULL,
 `precio` decimal(10,2) NOT NULL,
 `lugar` varchar(200) DEFAULT NULL,
 `descripcion` varchar(250) DEFAULT NULL,
 `prox_odometro` int(11) DEFAULT NULL,
 `prox_fecha` date DEFAULT NULL,
 `doc` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `tipo` (`tipo`),
 KEY `vehiculo` (`vehiculo`),
 CONSTRAINT `mantenimientos_ibfk_1` FOREIGN KEY (`tipo`) REFERENCES `tipo_mantenimiento` (`id`)
)

Como véis el campo tipo de la tabla 'mantenimientos' está relacionado con el campo id de la tabla 'tipo_mantenimiento'

Los registros los añado a través de PHP.

El problema que tengo es con un select de html. Resulta que a la hora de llegar a la página de editar el registro, en el select no aparece el valor que hay en el registro, si no en vacío. Puedo seleccionarlo, pero no se como hacer que salga el valor añadido como el resto de inputs.

Lo he intentado con una query con inner join, pero no a dado resultado.

Podría alguien decirme como.


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
<form name="formulario" method="POST" enctype="multipart/form-data">
    <?php
    include("../../conn/connection.php");
 
        if(isset($_GET['GetID'])){
 
            $id = $_GET['GetID'];
            $query_file="SELECT * FROM mantenimientos WHERE id = '".$id."'";
            $result_file = mysqli_query($conn,$query_file);
 
            while($row=$result_file->fetch_array()){
    ?>
    <br>
    Tipo : <select name="tipo" >
    <?php
        $query = "select t.id, t.tipo as tipo_mantenimiento, m.id as id_mantenimiento ,m.tipo from tipo_mantenimiento t inner join mantenimientos m where t.id = m.tipo";
      $result = mysqli_query($conn,$query);
        $row_tipo=$result->fetch_assoc();
     ?>
        <option value="<?php echo $row_tipo['id_mantenimiento']; ?>"><?php echo $row_tipo['tipo_manteniminto'];?></option>
 
     <?php
      //require("../../conn/connection.php");
      $query = "select DISTINCTROW id,tipo from tipo_mantenimiento";
      $result = mysqli_query($conn,$query);
      while ($row_mantenimiento=$result->fetch_assoc()) {
          echo '<option value="'.$row_mantenimiento['id'].'">'.$row_mantenimiento['tipo'].'</option>';
      }
     ?>
    </select><br><br>
 
</form>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Problema con select (HTML) e inner join (PHP)

Publicado por anonymous (53 intervenciones) el 01/02/2021 17:16:27
Lo que se alcanza a observar es que hay un mal diseño en las estructuras al nombrar las columnas y eso crea confusión.

El ID de mantenimientos debería llamarse Mantenimiento_ID, mientras que el de tipo_mantenimiento debería ser tipo_mantenimiento_ID

Las tablas se suelen nombrar en minúscula (O todas en Mayúscula o todas en Minúscula)

Pero el problema realmente está en que estás empleando un Where cuando debería ir es un ON

1
2
3
select t.id, t.tipo as tipo_mantenimiento, m.id as id_mantenimiento ,m.tipo
from tipo_mantenimiento t
inner join mantenimientos m ON t.id = m.tipo;
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
Imágen de perfil de jose
Val: 184
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problema con select (HTML) e inner join (PHP)

Publicado por jose (71 intervenciones) el 01/02/2021 20:26:42
Hola Jorge,

Agradezco las observaciones sobre nomenclaturas, he intentado estandarizarlas. Y ello me ha llevado a confusiones sobre todos con tablas relacionadas.

Sobre el error de poner where en vez de on, no entiendo como me he confundido, seguramente por que me estaba centrando más en el código php. Sin embargo lo probé en el en phpmyadmin y la query funcionó.

FUNCIONO!!!!

Muchas gracias por la ayuda.
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
sin imagen de perfil

Problema con select (HTML) e inner join (PHP)

Publicado por anonymous (53 intervenciones) el 01/02/2021 20:43:05
Pues si lo de la nomenclatura es solo por organización, mira que tu tienes dos columnas llamadas Tipo en ambas tablas y la una es un smallint y la otra un varchar, y la primera impresión que uno se lleva es que están relacionando las tablas por esa columna, y resulta que es por el ID. Las llaves foráneas se deben llamar igual que en las tablas padre de donde vienen, para evitar esos problemas.

En un SQL Inner Join siempre debe existir una relación entre las tablas, es decir un campo en común a través del cual relacionar, y se deben llamar igual preferiblemente, si tuviésemos una relación entre Pedidos y Clientes, cuyo campo en común es Cliente_ID nos quedaría:

1
2
3
SELECT Clientes.NombreCliente, Pedidos.PedidoID
FROM Clientes
INNER JOIN Pedidos ON Clientes.ClienteID=Pedidos.ClienteID

Ahora bien es válido también hacerlo así:

1
2
3
SELECT Clientes.NombreCliente, Pedidos.PedidoID
FROM Clientes, Pedidos
Where Clientes.ClienteID=Pedidos.ClienteID

Que de alguna manera era lo que tú estabas intentando hacer. Pero de esta forma se considera una mala práctica y si tú le das un explain plan para que te muestre cual query consume más recursos verás que es este último.

No sé si te queda claro, y si me he logrado hacer entender, pero te recomiendo mires sintaxis y ejemplos de Inner Join
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
Imágen de perfil de jose
Val: 184
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problema con select (HTML) e inner join (PHP)

Publicado por jose (71 intervenciones) el 02/02/2021 11:54:47
Hola Jorge,

Muchas gracias, me queda muy claro. Hace tiempo que quería cambiar las nomenclaturas. Y de hecho lo tengo en proyecto. Lo que ocurre es que inicié hará cuatro años este proyecto que ha ido agrandándose. Cada cambio afecta a otras tablas de otras bases de datos y a las páginas de php (lista,insertar,editar,borrar) .

Muchisimas gracias.
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