Foros del Web » Programando para Internet » PHP »

Mostrar valores separados por comas de 2 tablas relacionadas

Estas en el tema de Mostrar valores separados por comas de 2 tablas relacionadas en el foro de PHP en Foros del Web. Hola, he ingresado en un campo varios valores separados por comas (estos son los id de otra tabla) digamos 1,2,3 ahora mi progunta es como ...
  #1 (permalink)  
Antiguo 08/09/2017, 15:56
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 12 años, 6 meses
Puntos: 4
Mostrar valores separados por comas de 2 tablas relacionadas

Hola, he ingresado en un campo varios valores separados por comas (estos son los id de otra tabla) digamos 1,2,3 ahora mi progunta es como puedo mostrar el nombre de esos valores?

Tabla 1
id - categoria
1 - aaa
2 - bbb
3 - ccc

Tabla 2

id - nombre - id_categoria
1 - name1 - 1,3
2 - name2 - 1,2,3
3 - name3 - 1,2

Necesito mostrar:

name1 - aaa ccc
name2 - aaa bbb ccc
name3 - aaa ccc
  #2 (permalink)  
Antiguo 08/09/2017, 16:51
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Mostrar valores separados por comas de 2 tablas relacionadas

Saludo

Uhm, bueno, pues eso empezando es una mala manera
de manejar un modelo de base de datos, justamente
porque a la hora de hacer consultas no es óptimo.

Ahora bien, para hacer lo que quieres, necesitas hacer uso
de la función SUBSTRING_INDEX y luego hacer
subconsultas con cada uno de estos valores y unirlos con la función CONCAT.

Algo así

Código SQL:
Ver original
  1. SELECT
  2.     nombre,
  3.     CONCAT
  4.     (
  5.         (SELECT categoria FROM tabla1 WHERE id = SUBSTRING_INDEX(id_categoria , ',' ,1)), ' ',
  6.         (SELECT categoria FROM tabla1 WHERE id = SUBSTRING_INDEX(SUBSTRING_INDEX(id_categoria , ',' ,-2) , ',' ,1)), ' ',
  7.         (SELECT categoria FROM tabla1 WHERE id = SUBSTRING_INDEX(SUBSTRING_INDEX(id_categoria , ',' ,-1) , ',' ,1))
  8.     ) categoria
  9. FROM tabla2

__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #3 (permalink)  
Antiguo 08/09/2017, 17:01
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 12 años, 6 meses
Puntos: 4
Respuesta: Mostrar valores separados por comas de 2 tablas relacionadas

Hola gracias por responder, lo probe y funciona pero si son mas categorias tendira que poner mas SUBSTRING_INDEX, ahora analizandolo bie mejor tendria que crear otra tabla y ahi almacenas las relaciones no es asi?
  #4 (permalink)  
Antiguo 08/09/2017, 17:33
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Mostrar valores separados por comas de 2 tablas relacionadas

Saludo

Es correcto, lo mejor es manejar una tabla intermedia
que relacione los ids de tabla1 con tabla2 y la consulta
que haga uso de esa nueva tabla con joins.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 11/09/2017, 23:10
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 12 años, 6 meses
Puntos: 4
Respuesta: Mostrar valores separados por comas de 2 tablas relacionadas

Bueno logre hacer esta parte, todo perfecto pero ahora mi problema es en el update,

digamnos la tabla intermedia quedaria asi

id - id_pelicula - id_genero
1 - 1 - 1
2 - 1 - 2
3 - 1 - null
4 - 2 - 2
5 - 2 - null
6 - 2 - 3

Como modifico solo los id_genero
Código PHP:
for ($i=0$i<$num$i++) {
                
$this->_movie->EditarMovieGenero(
                    
$_POST['id_pelicula'][$i],
                    
$_POST['genero'][$i]
                );
            } 
$num es la cantidad de generos que existen.

Código PHP:
public function editarGenero($id_pelicula$id_genero)
    {
        
$this->_db->prepare("UPDATE peliculas_generos SET id_genero = :id_genero WHERE id_pelicula = :id_pelicula")
            ->
execute(
            array(
':id_pelicula'  => $id_pelicula,
                  
':id_genero'    => $id_genero
                 
)
        );
    } 
De esta manera me actualiza pero me pone el mismo id_genero a determinado id_pelicula algo asi

id - id_pelicula - id_genero
1 - 1 - 2
2 - 1 - 2
3 - 1 - 2
  #6 (permalink)  
Antiguo 12/09/2017, 00:43
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Mostrar valores separados por comas de 2 tablas relacionadas

Saludo

Pues entonces el inconveniente está es en el formulario,
al parecer siempre envía el mismo id de genero
cuando debería cambiar dependiendo de la película,
así que revisa eso, porque los querys se ven bien.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #7 (permalink)  
Antiguo 12/09/2017, 11:02
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 12 años, 6 meses
Puntos: 4
Respuesta: Mostrar valores separados por comas de 2 tablas relacionadas

Si me los envia bien, creo que me actualiza solo el ultimo id_genero en todos los id de la misma pelicula.

Código HTML:
Ver original
  1. <select multiple="multiple" id="genero" name="genero[]" class="form-control selectpicker" multiple data-actions-box="true">
  2.                                 {$g = explode("-", $datos.genero)}
  3.                                 {foreach from=$generos item=gen}
  4.                                     <option class="text-capitalize" value="{$gen.id|default:""}" {if (array_search($gen.genero, $g) !== false)} selected="selected" {/if}>{$gen.genero}</option>
  5.                                 {/foreach}
  6.                             </select>
  #8 (permalink)  
Antiguo 12/09/2017, 11:42
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Mostrar valores separados por comas de 2 tablas relacionadas

Saludo

Claro, eso es por la condición que tienes en el update.
Solo le dices que donde la película sea tal,
y claro, como en la tabla puede haber
varios registros al ser los datos un select multiple,
a la hora del update el actualiza todos los registros de la película.

Lo mejor sería que no hagas updates, solo inserts o deletes.

Me explico.
Al inicio, digamos la película 1 no tiene registros en esta tabla.
Al manipularla en el formulario, eliges el genero 1 y 2,
y envías.

Al hacer el envío, lo primero sería borrar los registros
de la tabla intermedia (en este momento no hay) donde
la película sea el id 1 para el ejemplo, y luego si se hacen los inserts.

por ende la tabla intermedia queda así:

pelicula genero
1 1
1 2

Y luego dices, no, los generos correctos son el 1, 3 y 4.
entonces lo que haces es editarlo en el formulario,
en donde arrancarían imagino seleccionados los que tenía antes (1 y 2)
y lo que harías es seleccionar el 3 y el 4 y quitar el 2 de la selección,
y envias.


Al hacer el envío, lo primero sería borrar los registros
de la tabla intermedia (en este momento si hay) donde
la película sea el id 1 para el ejemplo, y luego si se hacen los inserts,
quedando así:

pelicula genero
1 1
1 3

1 4

Y con eso debería bastar.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #9 (permalink)  
Antiguo 12/09/2017, 13:57
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 12 años, 6 meses
Puntos: 4
Respuesta: Mostrar valores separados por comas de 2 tablas relacionadas

Hola nuevamente y gracias por tu respuesta de esa forma me funciono perfecto, ahora mi pregunta es si habra alguna forma de hacerlo con el update y si esta forma no satura mucho es server con las consultas ya que tengo que hacer dos buvles uno para el delete y el otro para el insert?
  #10 (permalink)  
Antiguo 12/09/2017, 14:42
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Mostrar valores separados por comas de 2 tablas relacionadas

Saludo

Bueno, si te quieres poner en la tarea de hacer updates,
entonces eso requiere más tarea. porque te tocaría
o enviar los ids de generos antiguos (incluso los que ya quitaron del select)
o hacer una consulta (select) dentro del update donde traiga
los generos de la película seleccionada que no son los que
han enviado (puede ser con un limit 1 para que traiga 1 por turno)
y ese registro sea el que actualice con alguno de los ids de genero nuevos.

En cuanto a los bucles, sería solo uno
(o dos dependiendo de si envias varias películas al tiempo)

Es decir, si editas película por película, entonces solo envias el id de una
película y sus generos, en cuyo caso al recibir los datos
lo primero es el delete a la tabla intermedia con el id de pelicula,
y listo, los borro todos. Y ya es ahora cuestión de recorrer los generos e insertar.

Si se editan varias películas, entonces se enviarán los ids de las películas y sus generos respectivos a cada una, en cuyo caso es doble recorrido,
pero el delete sigue igual (solo una orden sin bucles en si misma),
pero que obviamente si estará contenida dentro del primer bucle de las películas.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #11 (permalink)  
Antiguo 12/09/2017, 15:34
 
Fecha de Ingreso: octubre-2011
Mensajes: 132
Antigüedad: 12 años, 6 meses
Puntos: 4
Respuesta: Mostrar valores separados por comas de 2 tablas relacionadas

mortiprogramador, gracias por tus respuestas, me puse a la tarea de hacer el update, ahora lo que hice fue esto traje los id de la tabla peliculas_generos segun su id_peliculas y con un campo hidden los paso al controller en el For {.... editarMobieGenero() ...}

y en el model le paso la condición WHERE id = :id OR id_pelicula = :id_pelicula

Con esto me funciono, no se si sera la mejor manera pero lo veo mas simple en vez de estar eliminando e insertando los registros que me dices de esta alternativa?
  #12 (permalink)  
Antiguo 12/09/2017, 17:28
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Mostrar valores separados por comas de 2 tablas relacionadas

Saludo

Bueno, en mi caso me parece más sencillo borrar e insertar.

En el caso que muestras, las condiciones son el id (la PK)
O el idpelicula, pero en este caso, todos los registros
de esta pelicula cambiarian a un solo genero, por la condición del OR (ese id que envias (PK) es de los registros antiguos que ya no están o como es?)

Imagino que tienes más condiciones, tocaría mirarlo
con más detalles, pero si ves que te funciona, pues ya esta.

Sin embargo, tomate un buen tiempo para hacer varias pruebas,
y ojalá no solo tu, sino otras personas.
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #13 (permalink)  
Antiguo 13/09/2017, 15:04
 
Fecha de Ingreso: enero-2004
Ubicación: Medellin
Mensajes: 178
Antigüedad: 20 años, 3 meses
Puntos: 8
Respuesta: Mostrar valores separados por comas de 2 tablas relacionadas

Te recomiendo esta entrada, te puede servir de algo

http://vicmandev.blogspot.com.co/201...rador-por.html

Etiquetas: comas, nombre, relacionadas, tabla, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:29.