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

[SOLUCIONADO] Filtrar Campos mediante ID

Estas en el tema de Filtrar Campos mediante ID en el foro de Mysql en Foros del Web. Hola amigos, tengo una duda en mysql, cree una base de datos en la cual tengo una tabla que almacena la mayoría de los id's ...
  #1 (permalink)  
Antiguo 01/04/2013, 14:25
Avatar de UNDR4  
Fecha de Ingreso: marzo-2012
Ubicación: Death Valley
Mensajes: 46
Antigüedad: 12 años, 1 mes
Puntos: 2
Pregunta Filtrar Campos mediante ID

Hola amigos, tengo una duda en mysql, cree una base de datos en la cual tengo una tabla que almacena la mayoría de los id's de las otra tablas, ahora el problema está en el filtrado de datos médiate esa tabla, un ejemplo de esto es

Tablas:
Productos |Marcas |Años
--------- -------- --------
id |id |id
id_marca |name |name
año_desde
año_hasta

Registros:
Productos |Marcas |Años
--------- -------- --------
1,1,1,2 |1,marca1 |1,2001
2,2,1,3 |2,marca2 |2,2002
|3,2003
Esto es lo que me muestra en un consulta general, está bien solo que quiero que me muestre el campo name que esté ligado al id

SELECT * FROM Productos
1,1,1,2
2,2,1,3

esto es lo que quiero que me muestre

marca1,2001,2002
marca2,2001,2003

Como ven, ya no me muestra el campo id de la tabla productos, y me muestra los campos name ligados a los id's

Esta es la query que estoy utilizando pero me genera datos repetidos

SELECT
M.name,A.name AS "Desde",A.name AS "Hasta"
FROM
Productos P,Marcas M,Años A
WHERE
P.id_marca=M.id AND
P.año_desde=A.id AND
P.año_hasta=A-id
ORDER BY
P.id

Ahora mismo no tengo una idea clara de cómo mostrar el resultado que deseo, les agradecería mucho si pueden apoyar con un pequeño ejemplo de esto
__________________
†UNDR4†
Un programador es un mamífero nocturno de ojos rojos capaz de conversar con objetos inanimados.

Última edición por UNDR4; 01/04/2013 a las 14:53
  #2 (permalink)  
Antiguo 01/04/2013, 15:14
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Filtrar Campos mediante ID

Hola UNDR4:

Vayamos por partes: es conveniente que en lugar de hacer las uniones de las tablas en el FROM-WHERE utilices JOIN's... si tienes dudas en cuanto a como funcionan, puedes preguntarle a SAN GOOGLE o a Santa WIKIPEDIA:

http://es.wikipedia.org/wiki/Join

Código:
En lugar de hacer esto

FROM tabla1, tabla2 WHERE tabla1.campo = tabla2.campo

Haz esto:

FROM tabla1 INNER JOIN tabla2 ON tabla1.campo = tabla2.campo
Segundo, en tu tabla tienes una doble referencia hacia el catálogo de años, por lo tanto es necesario que hagas un doble JOIN, utilizando un ALIAS:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM anios;
  2. +------+------+
  3. | id   | name |
  4. +------+------+
  5. |    1 | 2001 |
  6. |    2 | 2002 |
  7. |    3 | 2003 |
  8. +------+------+
  9. 3 rows in set (0.00 sec)
  10.  
  11. mysql> SELECT * FROM productos;
  12. +------+----------+------------+------------+
  13. | id   | id_marca | anio_desde | anio_hasta |
  14. +------+----------+------------+------------+
  15. |    1 |        1 |          1 |          2 |
  16. |    2 |        2 |          1 |          3 |
  17. +------+----------+------------+------------+
  18. 2 rows in set (0.00 sec)
  19.  
  20. mysql> SELECT p.id, a1.name anio_desde, a2.name anio_hasta
  21.     -> FROM productos p
  22.     -> INNER JOIN anios a1 ON p.anio_desde = a1.id
  23.     -> INNER JOIN anios a2 ON p.anio_hasta = a2.id;
  24. +------+------------+------------+
  25. | id   | anio_desde | anio_hasta |
  26. +------+------------+------------+
  27. |    1 | 2001       | 2002       |
  28. |    2 | 2001       | 2003       |
  29. +------+------------+------------+
  30. 2 rows in set (0.00 sec)

Tercero, la palabra reservada AS es completamente obsoleta y ya no forma parte del estandar de SQL.

Finalmente, es recomendable que trates de dar formato a tus post's, utiliza las etiquetas de code (#) o los highlight, de esta manera tu texto será más claro.

Haz la prueba y nos comentas

Saludos
Leo.
  #3 (permalink)  
Antiguo 02/04/2013, 10:05
Avatar de UNDR4  
Fecha de Ingreso: marzo-2012
Ubicación: Death Valley
Mensajes: 46
Antigüedad: 12 años, 1 mes
Puntos: 2
Respuesta: Filtrar Campos mediante ID

Hola, muchas gracias por responder me has ayudado mucho y lo siento eh olvidado por completo las etiquetas highlight al momento de realizar el tema

Solo un cosa más, es recomendable usar el inner join en más de una ocasión, ya que tengo que hacer un filtrado con varios registros de un par de tablas mas

Muchas gracias y saludos
__________________
†UNDR4†
Un programador es un mamífero nocturno de ojos rojos capaz de conversar con objetos inanimados.
  #4 (permalink)  
Antiguo 02/04/2013, 10:28
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: Filtrar Campos mediante ID

Hola UNDR4:

tu puedes usar todos los JOIN's que necesites, no solo INNER, sino también LEFT o RIGTH JOIN's o cualquier combinación de ellos, todo depende de cómo tienes organizada la información y qué es lo que necesitas obtener.

Recuerda las diferecias que existen entre cada uno de los JOIN's, es por eso que te puse la liga que nos legó Santa Wikipedia:

http://es.wikipedia.org/wiki/Join

Lo demás es práctica y un poco de sentido común... yo en algunos casos he llegado a hacer consultas donde involucro 15 o 20 tablas con distintos JOIN's, sin ningún problema.

Saludos
Leo.

Etiquetas: query
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 16:31.