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

Cómo hacer esto?

Estas en el tema de Cómo hacer esto? en el foro de Mysql en Foros del Web. Buenas, Llevo dos días dándole vueltas a la cabeza y no se me ocurre como hacer esto: Tengo una tabla (Tabla1): Esta tabla tiene el ...
  #1 (permalink)  
Antiguo 05/01/2013, 08:21
 
Fecha de Ingreso: junio-2011
Mensajes: 342
Antigüedad: 12 años, 9 meses
Puntos: 5
Exclamación Cómo hacer esto?

Buenas,

Llevo dos días dándole vueltas a la cabeza y no se me ocurre como hacer esto:

Tengo una tabla (Tabla1): Esta tabla tiene el contenido en dos celdas en una pone 106 y en otra 206. Y está en la columna Z.

Luego tengo otra (Tabla2): En esta hay tres columnas. Origen, Destino y Coche. Y dos entradas en una: Madrid, Barcelona, 106,206,306 y en otra: Valencia, Málaga, 206, 5008, 4008. (En la columna coche, dentro de una celda hay tres datos separados por comas).

Quiere que sólo me filtre la rutas de la Tabla2 para los coches que puedo conducir que son los de la tabla 1 (106 y 206).

Pero quiero que simpre esté preparado para que ingrese más coches en la tabla1 y más rutas en la tabla2.

He pensado en hacerlo con forms y así, pero cuando tengo que separar los diferentes coches que hacen la ruta harmo un cristo.
  #2 (permalink)  
Antiguo 05/01/2013, 09:09
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Cómo hacer esto?

Hola carlosuc99,

De verdad he leído tu mensaje 3 veces y creo que no entiendo mucho tu pregunta.
1. Sabes en que lenguaje lo harás?
2. Que base de datos usas?
3. Ese esquema de la DB no se puede cambiar?
Porque te vendría mejor cambiarlo y usar una tercera tabla con las rutas que tengan el id de la tabla 2(origen-destino) para identificarlas, creo así te funcionaría mejor para búsquedas y demás.

Saludos
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #3 (permalink)  
Antiguo 05/01/2013, 15:07
 
Fecha de Ingreso: junio-2011
Mensajes: 342
Antigüedad: 12 años, 9 meses
Puntos: 5
Exclamación Respuesta: Cómo hacer esto?

Cita:
Iniciado por the_web_saint Ver Mensaje
Hola carlosuc99,

De verdad he leído tu mensaje 3 veces y creo que no entiendo mucho tu pregunta.
1. Sabes en que lenguaje lo harás?
2. Que base de datos usas?
3. Ese esquema de la DB no se puede cambiar?
Porque te vendría mejor cambiarlo y usar una tercera tabla con las rutas que tengan el id de la tabla 2(origen-destino) para identificarlas, creo así te funcionaría mejor para búsquedas y demás.

Saludos
Leguaje? PHP, por algo lo pongo en este foro

Basa de datos? MySQl

Esquepa de la db? la tabla rutas es la tabla dos y tiene: Origen, Destino y Coches. EJ: Origen= Madrid, Destino= Barcelona, Coches=206, 106, 5008.
  #4 (permalink)  
Antiguo 05/01/2013, 15:16
 
Fecha de Ingreso: agosto-2012
Ubicación: Galicia
Mensajes: 13
Antigüedad: 11 años, 7 meses
Puntos: 2
Respuesta: Cómo hacer esto?

leyendo lo que expusiste te digo como lo haria yo ( si es que lo entendi bien )

Lo que tendrías que hacer sería una consulta a la tabla 1 en la que recogieses los coches que puedes conducir.

Una vez tengas el valor del 1er coche (106) debes hacer una consulta a la tabla 2 donde recojas todos los registros.
Cuando los recorras 1 a 1 deberás hacer en el campo Coche (de la tabla 2)un split con el caracter "," de separador( por lo que veo cada coche se separa por coma ) para que te separe los coches y poder hacer un IF donde iguales el valor del coche que tienes de la primera consulta(106(, con los valores devueltos del campo Coche de la segunda. En caso de que coincida imprimes los resultados y en caso de que no pues dejas seguir el bucle.
  #5 (permalink)  
Antiguo 05/01/2013, 15:22
 
Fecha de Ingreso: junio-2011
Mensajes: 342
Antigüedad: 12 años, 9 meses
Puntos: 5
Exclamación Respuesta: Cómo hacer esto?

Cita:
Iniciado por yurujai Ver Mensaje
leyendo lo que expusiste te digo como lo haria yo ( si es que lo entendi bien )

Lo que tendrías que hacer sería una consulta a la tabla 1 en la que recogieses los coches que puedes conducir.

Una vez tengas el valor del 1er coche (106) debes hacer una consulta a la tabla 2 donde recojas todos los registros.
Cuando los recorras 1 a 1 deberás hacer en el campo Coche (de la tabla 2)un split con el caracter "," de separador( por lo que veo cada coche se separa por coma ) para que te separe los coches y poder hacer un IF donde iguales el valor del coche que tienes de la primera consulta(106(, con los valores devueltos del campo Coche de la segunda. En caso de que coincida imprimes los resultados y en caso de que no pues dejas seguir el bucle.
Pero si en vez de 3 coches para una ruta hay 4?. Entonces el split tiene que ir en un for?
  #6 (permalink)  
Antiguo 05/01/2013, 15:23
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Cómo hacer esto?

Cita:
Leguaje? PHP, por algo lo pongo en este foro
Primer error: Este no es el foro de PHP, es el foro de MySQL, y ni PH es MySQL, ni MySQL entiende PHP.
Son cosas total y completamente independientes.
Cita:
Esquepa de la db?
La pregunta se refiere a que si es posible realizar cambios en la base de datos, sea porque falten tablas, porque las relaciones estén mal diseñadas, porque carezca de normalización u otros defectos posibles que estén generando problemas para diseñar una buena consulta.

Yendo a desglosar lo que pones en el primer post:

Cita:
Tengo una tabla (Tabla1): Esta tabla tiene el contenido en dos celdas en una pone 106 y en otra 206. Y está en la columna Z.
Ajá... ¿Y qué se supone que representa esa tabla y esos valores?
Nosotors no tenemos ni idea, por lo que en realidad eso no nos dice nada.

Cita:
Luego tengo otra (Tabla2): En esta hay tres columnas. Origen, Destino y Coche. Y dos entradas en una: Madrid, Barcelona, 106,206,306 y en otra: Valencia, Málaga, 206, 5008, 4008. (En la columna coche, dentro de una celda hay tres datos separados por comas).
Acá ya pinta que tienes un diseño espantosamente mal planteado.
Los campos multivaluados (aquellos donde hay más de un valor en un mismo registro, separados por coma como dices), están totalmente prohibidos en las bases de datos.
Son una violación tan flagrante al fundamentos de las bases de datos, que si lo pusieras en un examen de la materia en la primera respuesta, reprobarías instantáneamente, sin necesidad de seguir leyendo los restantes puntos.
Un campo que puede adoptar varios valores para un registro dado significa que hay una relación N:N entre esa entidad y otra más, y toda relación N:N genera una tabla adicional. Siempre.
En otras palabras, te falta al menos una tabla en tu base de datos.

Cita:
Quiere que sólo me filtre la rutas de la Tabla2 para los coches que puedo conducir que son los de la tabla 1 (106 y 206).
Con una base mal diseñada como la que tienes, eso no lo vas a poder lograr.

Cita:
Pero quiero que simpre esté preparado para que ingrese más coches en la tabla1 y más rutas en la tabla2.
Siempre están preparados, pero para eso el analisis del sistema tiene que estar bien hecho, y aún falta muchísima información.

Cita:
He pensado en hacerlo con forms y así, pero cuando tengo que separar los diferentes coches que hacen la ruta harmo un cristo.
Forms, paginas o visualizaciones, no son tema de base de datos, porque las bases de datos no muestran cosas en pantallas. Para eso está la programación de aplicaciones.

En definitiva: Con lo que tienes, debes volver al boceto y reanalizar el sistema, crear un buen diagrama de entidad-relación (DER), hacer la transformación a modelo físico de tablas, normalizar la base y recién entonces estarás en condiciones de crear el DAC (Data Access Control) en PHP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 05/01/2013, 15:27
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Cómo hacer esto?

Si no te interesa nada de lo que te dije, y quieres resolver el tema parchandolo en PHP, te paso el post al foro correcto.
__________________
¿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 05/01/2013, 15:34
 
Fecha de Ingreso: junio-2011
Mensajes: 342
Antigüedad: 12 años, 9 meses
Puntos: 5
Exclamación Respuesta: Cómo hacer esto?

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Si no te interesa nada de lo que te dije, y quieres resolver el tema parchandolo en PHP, te paso el post al foro correcto.
Del foro de PHP, me han pasado para aquí.

El esquema de la db se puede modificar sin problemas.

Creo que es algo que necesita MYSQL y PHP. Las bases de datos van primero asi que necesito que me guieis por aquí.
  #9 (permalink)  
Antiguo 05/01/2013, 15:41
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Cómo hacer esto?

Entonces empecemos por el principio:
Explicanos qué representan esas dos tablas, y si es posible postea la estructura de las mismas.
Es importante que sea la estructura real, por lo que te aconsejo que uses
Código MySQL:
Ver original
  1. SHOW CREATE TABLE nombreDeTabla;
donde nombreDeTabla es el nombre de cada tabla que estás usando, y luego copies y postees acá el resultado de eso.
Si estás utilizando phpMyAdmin es posible que no se vea el contenido completo, por lo que deberás hacer que la visualización amplíe el resultado. El botón para eso lo verás como algo parecido a:
Cita:
<-T->
Con eso veremos la estructura real de lo que estás usando, para verificar si hay otros errores no evidentes en tu descripción.

PD: Programación es tema no permitido acá, por lo que no se debe postear nada que no sea SQL (reglas del foro de bases de datos). Si vemos código no SQL, simplemente lo editamos y lo eliminamos. Es una función de los moderadores, conforme las Políticas de Uso de Foros del Web.

Si quieres saber por qué, es simple: No todos los que trabajan en bases de datos programan, ni tampoco los que lo hacen lo hacen todos en PHP (yo suelo usar VB.Net y C#.Net). Y aquellos que no programan ven el código de programación como simple "basura" qu eensucia el SQL.
Además, el código de programación esconde errores en las variables, que no son accesibles en el SQL.
El 90% de las veces que hay codigo SQL embebido en código programado, los errores terminan siendo por datos erróneos de las variables, y no de SQL.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 05/01/2013 a las 15:46
  #10 (permalink)  
Antiguo 05/01/2013, 15:58
 
Fecha de Ingreso: junio-2011
Mensajes: 342
Antigüedad: 12 años, 9 meses
Puntos: 5
Exclamación Respuesta: Cómo hacer esto?

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Entonces empecemos por el principio:
Explicanos qué representan esas dos tablas, y si es posible postea la estructura de las mismas.
Es importante que sea la estructura real, por lo que te aconsejo que uses
Código MySQL:
Ver original
  1. SHOW CREATE TABLE nombreDeTabla;
donde nombreDeTabla es el nombre de cada tabla que estás usando, y luego copies y postees acá el resultado de eso.
Si estás utilizando phpMyAdmin es posible que no se vea el contenido completo, por lo que deberás hacer que la visualización amplíe el resultado. El botón para eso lo verás como algo parecido a:
Con eso veremos la estructura real de lo que estás usando, para verificar si hay otros errores no evidentes en tu descripción.

PD: Programación es tema no permitido acá, por lo que no se debe postear nada que no sea SQL (reglas del foro de bases de datos). Si vemos código no SQL, simplemente lo editamos y lo eliminamos. Es una función de los moderadores, conforme las Políticas de Uso de Foros del Web.

Si quieres saber por qué, es simple: No todos los que trabajan en bases de datos programan, ni tampoco los que lo hacen lo hacen todos en PHP (yo suelo usar VB.Net y C#.Net). Y aquellos que no programan ven el código de programación como simple "basura" qu eensucia el SQL.
Además, el código de programación esconde errores en las variables, que no son accesibles en el SQL.
El 90% de las veces que hay codigo SQL embebido en código programado, los errores terminan siendo por datos erróneos de las variables, y no de SQL.
Primero de todo, como ya te dije esto era para el foro de PHP, por eso mencioné lo del código.

Con el resto voy a intentar ser más explícito (no es mi fuerte).

Tabla = HABILITACIONES_COCHES

COCHE
106
206


Tabla = RUTAS

ORIGEN - DESTINO - COCHESQUEHACENLARUTA
Madrid - Barcelona - 106,206,5008,506
Valencia - Málaga - 5008, Q7, A7


Bien pues ahora con eso lo que quiero hacer es coger los coches para los que estoy habilitado e imprimir en pantalla las rutas que puedo hacer con esos coches. Lógicamente ahora estoy habilitado para 2 coches y 2 rutas, pero a lo mejor mañana lo estoy para 3 coches y 50 rutas. (Esto lo tendré que hacer con código pero lo digo para que me entendáis y me digáis opciones para mejorar la estructura)
  #11 (permalink)  
Antiguo 05/01/2013, 16:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Cómo hacer esto?

Esa descripción es insuficiente.
Postea lo que te dije:
Cita:
Explicanos qué representan esas dos tablas, y si es posible postea la estructura de las mismas.
Es importante que sea la estructura real, por lo que te aconsejo que uses
Código MySQL:
Ver original
  1. SHOW CREATE TABLE nombreDeTabla;
donde nombreDeTabla es el nombre de cada tabla que estás usando, y luego copies y postees acá el resultado de eso.
Si estás utilizando phpMyAdmin es posible que no se vea el contenido completo, por lo que deberás hacer que la visualización amplíe el resultado. El botón para eso lo verás como algo parecido a:
Cita:
<-T->
Con eso veremos la estructura real de lo que estás usando, para verificar si hay otros errores no evidentes en tu descripción.
Con esto:
Cita:
ORIGEN - DESTINO - COCHESQUEHACENLARUTA
Madrid - Barcelona - 106,206,5008,506
Valencia - Málaga - 5008, Q7, A7
Yo ya estoy infiriendo que a tu base de datos le están faltando varias tablas, y no sólo una.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 05/01/2013, 17:25
 
Fecha de Ingreso: junio-2011
Mensajes: 342
Antigüedad: 12 años, 9 meses
Puntos: 5
Exclamación Respuesta: Cómo hacer esto?

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Esa descripción es insuficiente.
Postea lo que te dije:


Con esto:

Yo ya estoy infiriendo que a tu base de datos le están faltando varias tablas, y no sólo una.
Realmente no tengo creada la tabla. Como explico es un proyecto y quiero saber la manera de hacerlo.

De todas maneras dime que le falta. Te estoy diciendo el contenido de la misma y las columnas que la componen.
  #13 (permalink)  
Antiguo 06/01/2013, 07:24
 
Fecha de Ingreso: noviembre-2003
Ubicación: Zaragoza, España
Mensajes: 1.257
Antigüedad: 20 años, 5 meses
Puntos: 154
Respuesta: Cómo hacer esto?

Hola carlosuc99,

Creo que a lo que se refiere gnzsoloyo es a algo así, solo es un ejemplo, lo real deberás colocarlo tú:

Tabla "habilitaciones_coches":

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `habilitaciones_coches` (
  2.   `id_habilitaciones` int(11) NOT NULL auto_increment,
  3.   `coche` varchar(15) collate latin1_spanish_ci NOT NULL,
  4.   PRIMARY KEY  (`id_habilitaciones`),
  5.   KEY `coche` (`coche`)
  6. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci AUTO_INCREMENT=1 ;


Tabla "rutas":

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `rutas` (
  2.   `id_rutas` int(11) NOT NULL auto_increment,
  3.   `origen` varchar(15) collate latin1_spanish_ci NOT NULL,
  4.   `destino` varchar(15) collate latin1_spanish_ci NOT NULL,
  5.   `coche` varchar(15) collate latin1_spanish_ci NOT NULL,
  6.   PRIMARY KEY  (`id_rutas`),
  7.   KEY `coche` (`coche`)
  8. ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_spanish_ci AUTO_INCREMENT=1 ;

No olvides usar Higlight al colocar código MySQL, espero que mi intromisión sirva de ayuda...

.

Etiquetas: php, 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 14:33.