Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Juntar campos de una misma tabla.

Estas en el tema de Juntar campos de una misma tabla. en el foro de Bases de Datos General en Foros del Web. Buenas tengo una tabla ps_direcciones con los campos ID, via, direccion, numero puerta y me gustaría juntar via, direccion, numero y puerta en el campo ...
  #1 (permalink)  
Antiguo 27/05/2014, 06:52
 
Fecha de Ingreso: mayo-2014
Ubicación: Valencia
Mensajes: 63
Antigüedad: 10 años, 7 meses
Puntos: 0
Juntar campos de una misma tabla.

Buenas tengo una tabla ps_direcciones con los campos ID, via, direccion, numero puerta y me gustaría juntar via, direccion, numero y puerta en el campo de direccion.

Esta unificación se ha de poder hacer por ID, vamos... juntar campos de la ID 1 a la 100, por ejemplo.

Lo que he de hacer es lo siguiente...

ID, via, direccion, numero, puerta
1, calle, las barcas, 12, 12

Y que me lo deje así...

1, calle, calle las barcas 12-12, 12, 12

Gracias
  #2 (permalink)  
Antiguo 27/05/2014, 10:38
Avatar de andres_aquino  
Fecha de Ingreso: septiembre-2010
Ubicación: $("#place").html("FDW");
Mensajes: 138
Antigüedad: 14 años, 3 meses
Puntos: 24
Respuesta: Juntar campos de una misma tabla.

Para eso lo solucionás rápidamente parseando los datos antes de hacer la inserción en la base de datos, de tal forma que los datos que solicistes en la interfaz de tu aplicación, vos ya le pases a tu consulta (el query con tu insert) así como querés guardarlos. O lo haces del lado de tu aplicación antes de pasarle los datos a la BD, o bien lo haces en la BD misma programando algún trigger que se dispare haciendo lo mismo que mencioné antes pero con la diferencia que la programación correría en la BD y no en la aplicación que tienes.
__________________
Te sirvió mi ayuda? +1 ;D
Andy Aquino - @aquiandres
  #3 (permalink)  
Antiguo 27/05/2014, 10:45
 
Fecha de Ingreso: mayo-2014
Ubicación: Valencia
Mensajes: 63
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Juntar campos de una misma tabla.

Lo que pasa Andres es que no se hacer eso en prestashop, ya que trabaja con objetos. :/
  #4 (permalink)  
Antiguo 27/05/2014, 10:58
Avatar de andres_aquino  
Fecha de Ingreso: septiembre-2010
Ubicación: $("#place").html("FDW");
Mensajes: 138
Antigüedad: 14 años, 3 meses
Puntos: 24
Respuesta: Juntar campos de una misma tabla.

Entonces podrías probar haciendo un trigger para que, en la BD antes de realizar un insert o update en la tabla que necesitas, tome los campos "via, direccion, numero y puerta" y los concatene para guardar ésta información en vez de solamente "direccion". Así, dejas de la lado tener que estar tocando el código del Prestashop. Con esto en mente, tendría que funcionarte.
__________________
Te sirvió mi ayuda? +1 ;D
Andy Aquino - @aquiandres
  #5 (permalink)  
Antiguo 27/05/2014, 11:02
 
Fecha de Ingreso: mayo-2014
Ubicación: Valencia
Mensajes: 63
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Juntar campos de una misma tabla.

Y como hago ese trigger? :/
  #6 (permalink)  
Antiguo 27/05/2014, 11:10
 
Fecha de Ingreso: mayo-2014
Ubicación: Valencia
Mensajes: 63
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Juntar campos de una misma tabla.

Por lo que estoy leyendo por ahí de los triggers, este guardaría el valor de esos campos en otra tabla, pero yo, necesariamente, necesito que los guarde en la tabla ps_customers en el campo address, ya que después tengo una etiquetadora y un modulo de correos y solo pilla ese campo de address, entonces mi problema es que no sale el tipo de via (calle, urbanizacion, etc...), el numero y la puerta, solo sale la dirección a secas.

Ejemplo: Las Barcas
Tendría que salir: Calle Las Barcas, Numero 12, Puerta 14
  #7 (permalink)  
Antiguo 27/05/2014, 11:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Juntar campos de una misma tabla.

¿Qué DBMS usa la para los datos?

Nota: Prestashop no es tema de BBDD, por lo que las soluciones a plantear en este foro son sólo SQL. Si necesitas otra cosa, pasaré el post al foro correspondiente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 27/05/2014, 11:34
Avatar de andres_aquino  
Fecha de Ingreso: septiembre-2010
Ubicación: $("#place").html("FDW");
Mensajes: 138
Antigüedad: 14 años, 3 meses
Puntos: 24
Respuesta: Juntar campos de una misma tabla.

Ok. Los datos que necesitas residen en la misma tabla donde tienes la información sobre la que querés aplicarle digamos una operación, ésta es: concatenar. Suponiendo que tenés MySQL como motor de BD, aplicar un trigger a la tabla `ps_customers`, quedaría así:

Código MySQL:
Ver original
  1. DELIMITER $$
  2.     TRIGGER `after_insert_customers` AFTER INSERT
  3.     ON `ps_customers` FOR EACH ROW
  4.     BEGIN
  5.         INSERT INTO ps_customers (id, ..., via, direccion, numero, puerta)
  6.         VALUES (NEW.id, ..., concat(@direccion, ', Numero ', @numero, ', Puerta ', @puerta), @numero, @puerta);
  7.     END$$
  8. DELIMITER ;

Esto es sólo una pincelada, tal vez esté mal en alguna parte del código, ya que hace bastante tiempo que no toco MySQL, pero la idea creo que queda clara.
__________________
Te sirvió mi ayuda? +1 ;D
Andy Aquino - @aquiandres
  #9 (permalink)  
Antiguo 27/05/2014, 11:35
 
Fecha de Ingreso: mayo-2014
Ubicación: Valencia
Mensajes: 63
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Juntar campos de una misma tabla.

Es que intento solucionarlo desde el phpmyadmin, vamos, algún comando tendrá que haber para hacer lo que digo yo desde la base de datos. He ahí mi duda y por eso lo he puesto aquí.

Creo que tablas, campos y demás, son cosa de bases de datos, da igual que fuera prestashop, joomla, o lo que fuera quien ingresara esos datos.

Como digo, mi consulta va referida a juntar varios campos en uno desde phpmyadmin, :)

De todas formas, si creéis que no va aquí, pues lo pongo en otro hilo, pero creo que aquí es el oportuno.

Gracias a los dos.
  #10 (permalink)  
Antiguo 27/05/2014, 11:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Juntar campos de una misma tabla.

Cita:
Iniciado por mortisdj Ver Mensaje
Buenas tengo una tabla ps_direcciones con los campos ID, via, direccion, numero puerta y me gustaría juntar via, direccion, numero y puerta en el campo de direccion.

Esta unificación se ha de poder hacer por ID, vamos... juntar campos de la ID 1 a la 100, por ejemplo.

Lo que he de hacer es lo siguiente...

ID, via, direccion, numero, puerta
1, calle, las barcas, 12, 12

Y que me lo deje así...

1, calle, calle las barcas 12-12, 12, 12

Gracias
Pues vamos al punto: En qué lo ejecutes, es relevante, porque hay cosas que no se deben hacer en una base de datos, y cosas quye se pueden hacer mejor con programación.
Desde el punto de vista de BBDD, el que tengas los datos separados por via, dirección (calle), numero y puerta, es total y absolutamente correcto, y es eficiente para lograr consultas optimizadas.
Ahora bien, si lo que quieres es mostrar los datos de una determinada forma, eso es algo que puedes resolver al mismo tiempo en programación, o en una consulta, sin necesidad de "ensuciar" los datos, juntando todo en un único campo.
REspecto a "juntar todo" en una query, se hace con CONCAT(), cosa que puedes ver en el manual de referencia de MySQL, y sólo tendrías la complicación de asegurarte de cosniderar aquellos casos done to están presentes todos los datos en un mismo registro (es decir, cuando alguno no ha sido ingresado o no existe porque no corresponde al caso).

Por otro lado, la misma lógica puedes aplicar en la aplicación, y programarla para que te presente los datos de esa forma, sin necesidad, como dije, de ensuciar los datos de la base.
Ten muy presente que los atributos tienen un dominio, y no es correcto, ni conveniente, mezclar dominios que luego, por razones de consultas, necesitarás evaluar por separado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 27/05/2014, 12:16
 
Fecha de Ingreso: mayo-2014
Ubicación: Valencia
Mensajes: 63
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Juntar campos de una misma tabla.

Lo se gnzsoloyo, mi problema es que, a ver, te explico... correos nos ha mandado un modulo en el que solo pilla el campo de address del prestashop, el problema, es que hay mucha gente que al comprar, lo rellena mal, por eso poner facilidades y añadir un campo de via, numero y puerta.

Ahora bien, a la hora de usar ese modulo de correos para sacar las etiquetas desde prestashop, sólo pilla el campo address, lo cual es un impedimento, ya que si se envían con esas etiquetas, no llegaría ningún paquete, con el considerable mosqueo del cliente y los costes de volverlo a enviar, :S

En vez de llegar, seguiremos con el ejemplo anterior, a la "Calle las barcas 12, 12", llegaría a una dirección que se llamara "las barcas", dirección que no existe, obviamente, ya que no tiene ni tipo de vía, ni número, ni puerta.

Como Prestashop es un lío, pues he pensado que igual había alguna forma de unir esos campos desde phpmyadmin, vamos, si hoy tengo 30 pedidos, al finalizar la jornada, pues junto los campos vía, dirección, número y puerta con ID de la 1 a la 30, mañana, los pedidos que hayan, por ejemplo con ID de la 31 a la 60 y así sucesivamente.

En caso de no poderlo hacer, pues tocaría hacerlo a mano, ir cliente por cliente introduciendo manualmente esa información de los campos vía, número, puerta al de address. Y eso imagínate el tiempo que puede suponer hacerlo si tienes 300, 400, 500 pedidos al día.

Por eso mi post y por eso el ponerlo en el foro de bases de datos, si hay algún comando para decirle que me junte los campos vía, address, número y puerta de la ID X a la Y, pues a mi me evitaría horas y horas de trabajo.

Y ahora creo que esta mejor explicado.

Gracias a todos.
  #12 (permalink)  
Antiguo 27/05/2014, 12:38
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Juntar campos de una misma tabla.


Si puedes dirigir la lectura a una vista (view), se podría solucionar directamente.
¿Es configurable qué tabla lee esa funcioanlidad?

Perdón la ignorancia, pero como te dije, Prestashop no es tema de BBDD, por lo que no tengo información de su funcionamiento.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #13 (permalink)  
Antiguo 27/05/2014, 12:42
 
Fecha de Ingreso: mayo-2014
Ubicación: Valencia
Mensajes: 63
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Juntar campos de una misma tabla.

Bastante haces con intentar darme solución, a ver, la tabla es ps_address y los campos que quiero unir son via, address1, numero y puerta, todos ellos en el de address1.

Prestashop hace lo siguiente, lo he puesto en el foro de CMS, pero te lo pego por aquí para que veas el funcionamiento. De todas formas, más que tocar el código, lo que querria es hacerlo desde phpmyadmin si se puede. Sino, pues ya tocando el códido, pero prestashop me vuelve loco. Me costo horrores insertar los campos de vía, numero y puerta, los cuales no estaban integrados en prestashop, solo tenía el de address1.

Te pego lo que he puesto en el otro foro para que veas como funciona...

Buenas, primero explico el problema y después como lo tengo...

A ver.. correos nos ha mandado un modulo en el que solo pilla el campo de address del prestashop, el problema, es que hay mucha gente que al comprar, lo rellena mal, y hemos añadido los campos vía, número y puerta, para facilitar que a la hora de poner la dirección, se haga bien.

Ahora bien, a la hora de usar ese modulo de correos para sacar las etiquetas desde prestashop, sólo pilla el campo address, lo cual es un impedimento, ya que si se envían con esas etiquetas, no llegaría ningún paquete, con el considerable mosqueo del cliente y los costes de volverlo a enviar, :S

En vez de llegar a la "Calle las barcas 12, 12", llegaría a una dirección que se llamara "las barcas", dirección que no existe, obviamente, ya que no tiene ni tipo de vía, ni número, ni puerta.

Por el momento, tengo correctamente que a la hora de ingresar los datos se haga en los campos address1, vía, numero y puerta de la tabla ps_address.

Ahora bien, lo qe necesito es juntar esos valores en el campo address1

Si por ejemplo ingresan...

via: Calle
address1: Las Barcas
número: 7
puerta: 36

Se haga en el campo address1 como "Calle Las Barcas 7, 36"

Tengo habilitado el pedido rápido y esto es lo que tengo puesto...

en authentification.tpl
Cita:
Editado: Codigo de programacion no permitido en foros de BBDD.
Todo esto funciona bien, pero ingresa los select cada uno en su campo.

¿Como haría para que ingresara los select de vía, address, número y puerta en el campo de address1?

Última edición por gnzsoloyo; 27/05/2014 a las 13:47
  #14 (permalink)  
Antiguo 27/05/2014, 13:28
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Juntar campos de una misma tabla.

Eso ya es tema ajeno a BBDD...

tendré que mover el post al foro de Aplicaciones prefabricadas, de lo contrario deberé borrar todo el codigo de programación (lee las reglas de los foros de BBDD).

Entiede mi pregunta, ¿Cómo se determina de qué tabla toma los datos?
¿Está predeterminado en Prestashop, o se puede modificar a qué tabla accede para obtener los datos?
Si se puede redirigir a que tabla lee para eso, se podría redirigir a una VIEW, sin necesidad de tener que hacer modificaicones en los datos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 27/05/2014, 13:37
 
Fecha de Ingreso: mayo-2014
Ubicación: Valencia
Mensajes: 63
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Juntar campos de una misma tabla.

Lo he puesto para que lo veas y te hagas a la idea, como digo, busco una solución en este foro respecto a hacerlo en PHPMYADMIN.

Ya lo borro yo, :)
  #16 (permalink)  
Antiguo 27/05/2014, 13:38
 
Fecha de Ingreso: mayo-2014
Ubicación: Valencia
Mensajes: 63
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Juntar campos de una misma tabla.

Por eso he puesto bien claro lo siguiente...

"Prestashop hace lo siguiente, lo he puesto en el foro de CMS, pero te lo pego por aquí para que veas el funcionamiento. De todas formas, más que tocar el código, lo que querria es hacerlo desde phpmyadmin si se puede. Sino, pues ya tocando el códido, pero prestashop me vuelve loco. Me costo horrores insertar los campos de vía, numero y puerta, los cuales no estaban integrados en prestashop, solo tenía el de address1"
  #17 (permalink)  
Antiguo 27/05/2014, 13:39
 
Fecha de Ingreso: mayo-2014
Ubicación: Valencia
Mensajes: 63
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Juntar campos de una misma tabla.

Y nada, no me deja editar los temas antiguos, sólo los últimos, así que si quieres borrar el código, puedes hacerlo, a mi no me deja y era simplemente para que vieras como funciona prestashop, nada más, ;)

Repito por que parece que no queda claro, quiero una solución relacionada con MYSQL y para hacerla desde PHPMYADMIN, cosas que si que tienen que ver mucho con las bases de datos, ;)
  #18 (permalink)  
Antiguo 27/05/2014, 13:42
 
Fecha de Ingreso: mayo-2014
Ubicación: Valencia
Mensajes: 63
Antigüedad: 10 años, 7 meses
Puntos: 0
Respuesta: Juntar campos de una misma tabla.

Y respondiendote a tu pregunta, prestashop es un follón, trabaja por objetos, se definen clases y controladores y a día de hoy no comprendo muy bien su funcionamiento.

Por eso busco una solución desde el phpmyadmin, tocar el prestashop es complicado.
  #19 (permalink)  
Antiguo 27/05/2014, 13:49
Avatar de andres_aquino  
Fecha de Ingreso: septiembre-2010
Ubicación: $("#place").html("FDW");
Mensajes: 138
Antigüedad: 14 años, 3 meses
Puntos: 24
Respuesta: Juntar campos de una misma tabla.

Tal como lo había dicho en un comienzo, tenés la posiblidad de solucionar 1) a nivel de programación del lado de la aplicación (PHP) o 2) a nivel de programación en la BD realizando un trigger, que no necesariamente implica que se opere sobre otras, sino que puedes especificar sobre qué tabla o tablas vas a realizar las inserciones. Dado el caso, donde lo deseable es no tocar mucho el código PHP del Prestashop, lo mejor sería optar por esta última opción; eso si, habrás de leer unos minutos sobre la programación de triggers en MySQL para que puedas ajustar la solución a tu problema actual. De igual forma, creo que el query que te lo escribí antes, te será de ayuda para tu solución final.
__________________
Te sirvió mi ayuda? +1 ;D
Andy Aquino - @aquiandres
  #20 (permalink)  
Antiguo 27/05/2014, 13:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Juntar campos de una misma tabla.

Bueno, si las tablas son DE Prestashop, y tu sólo las has modificado agregando los campos que necesitabas, y Prestashop sólo accede a esa tabla (como ya dije, no conozco el kernel de Prestasho), sólo te quedn pocas opciones.
1) Crear una columna más, para el nombre de la calle.
2) Ejecutar un UPDATE global para crear el contenido del campo nuevo, copiando sólo el nombre de la calle.
3) Ejecutar un UPDATE masivo para poner en el campo address el resultado de un CONCAT sobre los otros datos.
4) Crear un trigger que ante cada INSERT y otro para los UPDATE de esa tabla, actualice el campo address con el calor del CONCAT() de los otros campos, tal que se mantenga actualizado el contenido de ese campo usado por Prestashop.

Obviamente estoy hciendo algunas suposiciones, y esto como solución está creando un campo con datos redundantes, que deben vigilarse para evitar inconsistencias...

La verdad, no le veo otra opción, salvo meterrse en el código del Prestashop y modificarlo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: campos, juntar, siguiente, tabla
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 09:47.