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

Duda con Consulta MySql, sería con WHERE o buscando otro campo en el SELECT?

Estas en el tema de Duda con Consulta MySql, sería con WHERE o buscando otro campo en el SELECT? en el foro de Mysql en Foros del Web. Buenas, no llevo mucho tiempo con MySQL pero con consultas más o menos básicas me apaño, el problema lo tengo cuando tengo cuando una consulta ...
  #1 (permalink)  
Antiguo 07/04/2011, 12:06
 
Fecha de Ingreso: junio-2001
Mensajes: 23
Antigüedad: 22 años, 9 meses
Puntos: 1
Pregunta Duda con Consulta MySql, sería con WHERE o buscando otro campo en el SELECT?

Buenas, no llevo mucho tiempo con MySQL pero con consultas más o menos básicas me apaño, el problema lo tengo cuando tengo cuando una consulta a una tabla depende de valores que están en otra.

Tiene que ser algo super-básico pero aún no me aclaro :(

Pongo mi caso:

Tengo la siguiente tabla de empresas:
* idEmpresa
* Nombre
* CIF
* Direccion
* CodigoPostal
* Localidad
* Provincia
* Pais

Y una tabla de productos:
* idProducto
* idEmpresa (que relaciona el producto con la empresa que lo vende)
* Nombre
* Descripcion
* CodigoBarras

Si voy a mi formulario de búsqueda de productos, tengo unas consultas simples:
Código:
SELECT * FROM `productos` WHERE 1 ORDER BY Nombre
SELECT * FROM `productos` WHERE (Nombre LIKE %$varNombre%) ORDER BY Nombre
SELECT * FROM `productos` WHERE (Nombre LIKE %$Descripcion%) ORDER BY Nombre
Hasta ahí todo bien, consultillas simples.


AQUÍ LA DUDA XD

Lo que me gustaría sería poder añadir a mi formulario la opción de que buscasen también productos en determinadas Localidades, Provincias y/o Países, pero esos tres valores están en la tabla "empresas" que son las que los venden.

Entonces tendría que hacer una consulta tipo
SELECT * FROM `productos` WHERE ...

Y es el WHERE lo que no sé...

Tendría que ser algo como WHERE "localidad de la empresa que vende el producto = 'Albacete'"

¿Cómo podría hacer esta query?


Muchas gracias por adelantado,
Herni_Hdez
__________________
A la mierda los torpedos... ¡Avante toda!
  #2 (permalink)  
Antiguo 07/04/2011, 14:22
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Duda con Consulta MySql, sería con WHERE o buscando otro campo en el SELEC

Hola Herni_Hdez:

Como apenas estás comenzando con esto de SQL te recomendaría que primero le des un vistazo a cualquier manual de SQL para principiantes, sobre todo para que observes cómo trabajan los JOIN's entre tablas. En tu caso por ejemplo si quisieras obtener todos los productos que produzcan o distribuyan empresas que estén radicadas en México la consulta quedaría más o menos así:

Código MySQL:
Ver original
  1. select T1.* from PRODUCTOS T1
  2. inner join EMPRESAS T2 on T1.idEmpresa = T2.idEmpresa
  3. where T2.Pais = 'México'.

Te repito que esto puede resultar un tanto difícil de entender si no tienes conocimientos del tema, por lo que nuevamente te hago la sugerencia de acudir primero a los manuales y si continuas con dudas, pues acudir a los foros.

Saludos
Leo
  #3 (permalink)  
Antiguo 07/04/2011, 14:45
 
Fecha de Ingreso: junio-2001
Mensajes: 23
Antigüedad: 22 años, 9 meses
Puntos: 1
Respuesta: Duda con Consulta MySql, sería con WHERE o buscando otro campo en el SELEC

Muchas gracias Leo,

Voy a indagar más en el tema de los JOIN porque parece que son la clave de la mitad de las querys complejas.

Tengo aquí por casa un bonito libro de la editorial Prentice Hall "MySQL Edición Especial" bien grande y hermoso de 832 páginas, lo único que espero es que no esté tan desfasado, es del año 2001.



Joder... miedo me da... acabo de ver que se escribió cuando la versión MySQL estable era la 3.22
__________________
A la mierda los torpedos... ¡Avante toda!
  #4 (permalink)  
Antiguo 07/04/2011, 15:17
 
Fecha de Ingreso: junio-2001
Mensajes: 23
Antigüedad: 22 años, 9 meses
Puntos: 1
Respuesta: Duda con Consulta MySql, sería con WHERE o buscando otro campo en el SELEC

Cita:
Iniciado por leonardo_josue Ver Mensaje
Código MySQL:
Ver original
  1. select T1.* from PRODUCTOS T1
  2. inner join EMPRESAS T2 on T1.idEmpresa = T2.idEmpresa
  3. where T2.Pais = 'México'.
He estado ojeando el libro, y no sé si es porque se trata de una versión de MySQL más antigua, pero creo que hay un ejemplo que podría valer y no usa JOIN. ¿Esto también valdría?

Código MySQL:
Ver original
  1. SELECT T1.* FROM PRODUCTOS T1, EMPRESAS T2
  2. WHERE (T1.idEmpresa = T2.idEmpresa) AND (T2.Pais = 'México');

Muchas gracias
Herni_Hdez

---------------------------------

EDITO: Bueno, he podido entrar al módulo MySQL de mi web y he podido probar ambas, y parece que funcionan bien las dos.
¿Algún motivo para usar una mejor que la otra, en plan motivos de rendimiento?

De nuevo muchas gracias,
HerniHdez
__________________
A la mierda los torpedos... ¡Avante toda!

Última edición por Herni_Hdez; 07/04/2011 a las 17:18 Razón: Alternativa sobre la respuesta ofrecida
  #5 (permalink)  
Antiguo 08/04/2011, 08:06
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Duda con Consulta MySql, sería con WHERE o buscando otro campo en el SELEC

Hola de nuevo Herni_Hdez:

Tal como lo intuyes en tu post, el motivo principal para utilizar JOIN's en lugar de listar tus tablas en el FROM y hacer las uniones en el WHERE es por cuestiones de rendimiento, aunque el resultado es el mismo, el performance sobre todo cuando manejas volúmenes de información grandes es infinitamente superior con el JOIN.

con respecto al libro, sinceramente te recomendaría que buscaras alguna otra ayuda, ya que la versión de MySQL a que hace referencia es bastante antigua y por lo tanto obsoleta. ¿Por qué no acudes a la documentación oficial de MySQL?

http://dev.mysql.com/doc/refman/5.0/es/index.html

Saludos
Leo

Etiquetas: select, buscadores, campos
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:06.