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

Traer registros con subconsulta?

Estas en el tema de Traer registros con subconsulta? en el foro de Mysql en Foros del Web. Buenos días gente del Foro. Estoy realizando una búsqueda en dos tablas ("productos" y "empresas"). La consulta consiste en buscar dentro de la tabla "productos", ...
  #1 (permalink)  
Antiguo 07/01/2013, 08:32
 
Fecha de Ingreso: octubre-2008
Ubicación: Bs. As., ARG
Mensajes: 203
Antigüedad: 15 años, 6 meses
Puntos: 6
Traer registros con subconsulta?

Buenos días gente del Foro. Estoy realizando una búsqueda en dos tablas ("productos" y "empresas").
La consulta consiste en buscar dentro de la tabla "productos", todos los registros coincidentes con la variable "nombre" que se recibe mediante el formulario (campo "nombre") con un LIKE.
Ahora, el tema esta en que todos esos registros deben cumplir la siguiente condición:
Que el campo "idEmp" de la tabla "productos" coincida con el campo "id" de la tabla "empresas", bajo la condición que todos esos "id" traídos de la tabla "empresas" sean del mismo "pais" y "tipo" que las variables recibidas mediante el formulario.

TABLA EMPRESAS:

Código MySQL:
Ver original
  1. `nombre` TEXT NULL ,
  2. `pais` TEXT NULL
  3. `tipo` TEXT NULL

TABLA PRODUCTOS:

Código MySQL:
Ver original
  1. `idEmp` INT( 11 ) NOT NULL ,
  2. `nombre` TEXT NULL
EL CÓDIGO PHP Y LA CONSULTA SQL:

Cita:
Editado: No se permite código de programación en los foros de Base de Datos (Normas del Foro)
Código MySQL:
Ver original
  1. SELECT a.*
  2. FROM productos AS a, empresas AS b
  3. WHERE a.nombre LIKE '%$producto%' AND b.pais LIKE '%$pais%' AND b.tipo = $tipo

El FORMULARIO:

Cita:
Editado: No se permite código de programación en los foros de Base de Datos (Normas del Foro)
Mediante la forma en que lo estoy intentando no funciona, tampoco pude con INNER JOIN. Alguna idea?

Última edición por gnzsoloyo; 07/01/2013 a las 08:40 Razón: Codigo de programación no permitido y SQL sin etiquetar.
  #2 (permalink)  
Antiguo 07/01/2013, 08:45
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: Traer registros con subconsulta?

Tienes varios errores, algunos de diseño de tablas, y alguno en la consulta.
Una consulta uqe devuelva los productos vinculados a una empresa, en tu contexto, sería mas o menos:
Código MySQL:
Ver original
  1. SELECT a.*
  2. FROM productos a INNER JOIN empresas b ON a.idEmp = b.id
  3. WHERE a.nombre LIKE '%$producto%' AND b.pais LIKE '%$pais%' AND b.tipo = $tipo
Tu error es que no estás haciendo correctamente el JOIN. La forma en que lo escribes me lleva a pensar que no conoces lo suficiente de SQL, por lo que te recomiendo enfáticamente que leas un manual básico de SQL y de JOINs, para evitar problemas.
Respecto a las tablas, usar campos TEXT donde deberías usar VARCHAR es un error severo de diseño.
Hay otras recomendaciones respecto de las tablas, pero como no pareces haberlas puesto completas, no puedo decirte anticipadamente nada, excepto que es mala idea poner el nombre del país como texto.
Cosas como Países, localidades, y categorías de lo que fuese, se administran como tablas independientes con las cuales las otras se relacionan. Ayuda mucho a reducir la redundancia y los errores de ingreso de 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)
  #3 (permalink)  
Antiguo 09/01/2013, 06:51
 
Fecha de Ingreso: octubre-2008
Ubicación: Bs. As., ARG
Mensajes: 203
Antigüedad: 15 años, 6 meses
Puntos: 6
Respuesta: Traer registros con subconsulta?

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Tienes varios errores, algunos de diseño de tablas, y alguno en la consulta.
Una consulta uqe devuelva los productos vinculados a una empresa, en tu contexto, sería mas o menos:
Código MySQL:
Ver original
  1. SELECT a.*
  2. FROM productos a INNER JOIN empresas b ON a.idEmp = b.id
  3. WHERE a.nombre LIKE '%$producto%' AND b.pais LIKE '%$pais%' AND b.tipo = $tipo

Gnzsoloyo, muchas gracias por tu aporte... funciono bien. También voy a tener en cuenta todo lo que comentas con respecto a los campos ("varchar" en lugar de "text"), y si... acertaste en que las tablas están incompletas (no puse todos los campos para que no sea engorroso). Saludos!!

Etiquetas: formulario, php, registros, select, sql, tabla, tracker, 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 11:40.