Foros del Web » Programando para Internet » PHP »

Problema al vincular dos tablas...

Estas en el tema de Problema al vincular dos tablas... en el foro de PHP en Foros del Web. Buenas, tengo una duda que no se como resolver. tengo una tabla empresas, y otra productos. en la tabla productos, guardo el idempresa que tiene ...
  #1 (permalink)  
Antiguo 29/02/2004, 17:05
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
Problema al vincular dos tablas...

Buenas, tengo una duda que no se como resolver. tengo una tabla empresas, y otra productos. en la tabla productos, guardo el idempresa que tiene esos productos.

tengo un select que me muestra las categorias de productos. mando la variable y muestro en una tabla el listado de productos de la bd. el problema es que quiero mostrar el nombre de la empresa, y solo puedo mostrar el idempresa.

el listado es SELECT FROM productos WHERE categoria='$categoria'.

pero como podria vinciular con la tabla empresas para mostrar el nombre de la empresa¿¿


otra duda, hjaciuendo el select muestro todas los id de empresas que tienen esos productos. como hago para que me muestre solo una empresa, es decir, que no se muestren repetidas??


salu2!!
  #2 (permalink)  
Antiguo 29/02/2004, 17:13
 
Fecha de Ingreso: noviembre-2002
Ubicación: Barcelona - España
Mensajes: 270
Antigüedad: 21 años, 5 meses
Puntos: 0
Hola ferranWeb, si en la tabla productos guardas el id de la empresa, solo tienes que leer la tabla de la empresa y seleccionar en nombre de la empresa correspondiente al id
Y para que no se muestren las empresas repetidas, puedes pasarlas a un array y hacer que no se impriman en pantalla las empresas repetidas
  #3 (permalink)  
Antiguo 29/02/2004, 19:28
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
gracias cooker por tu respuesta, pero como vinculo el id con el nombre?? tengo lo siguiente:

$sql= "SELECT DISTINCT idempresa FROM productos WHERE categoria='$categoria' LIMIT ".$inicio.",".$por_pag;
$resultados = mysql_query($sql);

luego, muestro los registros en una tabla de la siguiente manera:

<?while ($row = mysql_fetch_array($resultados)){?>

y un <?echo $row["idempresa"];?>

para mostrar los datos.

ahora viene la cuestion, como hago para que me vincule el idempresa de productos con idempresa de empresa, where categoria='$categoria'??

el problema es que tengo q mostrarlo dentro de una tabla, que muestra registros mientras haya resultados.. a ver si me ayudas a establecer este vinculo, que me estoy volviendo loco!!

salu2!!

PD: y explciame eso del array, que no lo entiendo
  #4 (permalink)  
Antiguo 29/02/2004, 19:53
 
Fecha de Ingreso: diciembre-2003
Mensajes: 54
Antigüedad: 20 años, 4 meses
Puntos: 0
Hola, eso se hace desde la misma consulta a la bdd.
Quedaria algo así:
Código PHP:
"SELECT productos.*, empresa.nombre as nombre_empresa FROM productos, empresa WHERE productos.categoria='$categoria' AND empresa.idempresa=productos.idempresa ..." (sigues con el limit y demas
con esto obtienes todos los datos del producto más una columna llamada nombre_empresa que obviamente contiene el nombre de la tabla empresa correspondiente al idempresa de ese producto en la tabla productos (se entiende, no ?).

Saludos
  #5 (permalink)  
Antiguo 29/02/2004, 19:59
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
gracias ktion por tu respuesta. pensaba que en mysql no se podain vincular tablas. me da el siguiente error:

Warning: Supplied argument is not a valid MySQL result resource in c:\inetpub\wwwroot\php\aslecat\categorias.php on line 60

<?while ($row = mysql_fetch_array($resultados)){?>

y creo que es pq la consulta no es correcta. tengo q ponerla tal cual? perdona, pero no acabo de entender lo que me explicas.

en caso de salir, como mostraria el nombre de empresa??

salu2!
  #6 (permalink)  
Antiguo 29/02/2004, 20:03
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
a ver, las dos tablas son productos y empresas. el campo que tienen en comun es idempresa. y el nombre de la empresa esta en el campo empresa de la tabla empresas...

a ver si esto te ayuda
  #7 (permalink)  
Antiguo 29/02/2004, 20:10
 
Fecha de Ingreso: diciembre-2003
Mensajes: 54
Antigüedad: 20 años, 4 meses
Puntos: 0
Hola, primero que nada fijate que los nombre de las tablas sean correctos (yo le puse productos y empresa).
Segundo que los campos sean correctos, en productos puse categoria e idempresa, y en empresa puse nombre e idempresa.
Tercero al final le puse "..." a la consulta eso se lo tienes que sacar y agregar lo de limit.
Con eso tendria que funcionar, sino cuando haces la consulta pon
Código PHP:
mysql_query(consulta) or die(mysql_error()); 
eso te va a mostrar cual es el error en la consulta.

Saludos
  #8 (permalink)  
Antiguo 29/02/2004, 20:12
 
Fecha de Ingreso: diciembre-2003
Mensajes: 54
Antigüedad: 20 años, 4 meses
Puntos: 0
Ok, entonces el error es que yo puse la tabla empresa (cuando es empresas) y el campo nombre, eso lo tienes que cambiar por empresa, quedaria así:
Código PHP:
"SELECT productos.*, empresas.empresa as nombre_empresa FROM productos, empresas WHERE productos.categoria='$categoria' AND empresas.idempresa=productos.idempresa ..." (sigues con el limit y demas
Saludos

Última edición por Ktion; 29/02/2004 a las 20:13
  #9 (permalink)  
Antiguo 29/02/2004, 20:16
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
ktion, gracias por tu paciencia, pero esto me pilla de nuevo..

tengo lo siguiente:

$sql=mysql_query("SELECT productos.*, empresas.empresa as nombre_empresa FROM productos, empresas WHERE productos.categoria='$categoria' AND empresas.idempresa=productos.idempresa LIMIT ".$inicio.",".$por_pag) or die(mysql_error());
$resultados = mysql_query($sql);

y me da el error que te decia antes... te pongo los nombres de las tablas y campos, a ver si puedes dejarme montada la consulta...

tabla productos

idproducto, idempresa,nombre,categoria...

tabla empresas

idempresa,empresa(nombre)....

como quedaria el select???

por favor, a ver si lo conseguimos!! salu2
  #10 (permalink)  
Antiguo 29/02/2004, 20:18
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
en principio los campos que he puesto estan bien, pq si cambio por ejemplos empresa.empresa, me pone lo siguiente:

Unknown table 'empresa' in field list

yo pensaba q en mysql no se podian vincular tablas como tu me dices
  #11 (permalink)  
Antiguo 29/02/2004, 20:24
 
Fecha de Ingreso: diciembre-2003
Mensajes: 54
Antigüedad: 20 años, 4 meses
Puntos: 0
Cita:
Mensaje Original por ferranWEB

tengo lo siguiente:

$sql=mysql_query("SELECT productos.*, empresas.empresa as nombre_empresa FROM productos, empresas WHERE productos.categoria='$categoria' AND empresas.idempresa=productos.idempresa LIMIT ".$inicio.",".$por_pag) or die(mysql_error());
$resultados = mysql_query($sql); <---- estas haciendo un mysql_query con el resultado de otro query, con el de arriba es suficiente
Fijate cambiando eso.

Saludos
  #12 (permalink)  
Antiguo 29/02/2004, 20:28
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
gracias, ahora me muestra el id, pq tengo hecho el echo row[id]. como hago para que me muestre el nombre de la empresa?? es el campo empresa de la tabla empresas...

salu2
  #13 (permalink)  
Antiguo 29/02/2004, 20:31
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
ya lo conseguiiii!!

ahora me gustaria saber dos cosas...

1) podrias explicarme detalladamente la consulta que hemos hecho?? me seria de gran ayuda..

2) como hago para que no me repita las empresas??

salu2!!
  #14 (permalink)  
Antiguo 29/02/2004, 20:36
 
Fecha de Ingreso: diciembre-2003
Mensajes: 54
Antigüedad: 20 años, 4 meses
Puntos: 0
Código PHP:
"SELECT productos.*, empresas.empresa as nombre_empresa ..." 
en este caso el campo empresa de la tabla empresas lo devuelve con el nombre "nombre_empresa" (por si tenias un campo igual en la tabla productos), pero ya que asumo que no tienes un campo "empresa" en la tabla productos, entonces se lo puedes sacar y que la consulta quede:
Código PHP:
"SELECT productos.*, empresas.empresa ..." 
(sin el as nombre_empresa)
y en este caso el campo que contendria el nombre seria directamente "empresa"
  #15 (permalink)  
Antiguo 29/02/2004, 20:42
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
pero pq pones productos.*?? cual es la sintaxis correcta para vincular campos de diferentes tablas??

como puedo hacer ahora que no me muestre los nombre de empresas repetidos??

he leido algo del select distinct, pero no se como se hace. me ayudas?

salu2
  #16 (permalink)  
Antiguo 29/02/2004, 20:50
 
Fecha de Ingreso: diciembre-2003
Mensajes: 54
Antigüedad: 20 años, 4 meses
Puntos: 0
Cita:
Mensaje Original por ferranWEB
ya lo conseguiiii!!

ahora me gustaria saber dos cosas...

1) podrias explicarme detalladamente la consulta que hemos hecho?? me seria de gran ayuda..

2) como hago para que no me repita las empresas??

salu2!!
1) Por partes:
Código PHP:
"SELECT productos.*, empresas.empresa as nombre_empresa ..." 
aca se usa nombredetabla.campo separados por comas para indicar especificamente que campos y de que tablas queremos que devuelva, podria haber puesto directamente * (sin nombre de tablas ni nada) pero si hay 2 campos que se llamen igual en diferentes tablas generaria problemas, ademas si no se necesita la información seria una sobrecarga inutil.
Código PHP:
"... FROM productos, empresas ..." 
Se seleccionan las tablas que queremos consultar.
Código PHP:
"... WHERE productos.categoria='$categoria' AND empresas.idempresa=productos.idempresa ..." 
Se ponen las condiciones bajo las cuales debera devolver un registro, 1ero. que los productos pertenezcan a la categoria "$categoria", 2do. que exista un idempresa en la tabla empresa que corresponda al idempresa de productos.

Puede parecer complicado, pero haciendolo un par de veces sale solo.

2) Si quieres solo los nombre de las empresa que pertenezcan a esa categoria puedes poner un GROUP BY empresa.idempresa, pero en este caso no tendria sentido poner el "... productos.*..." porque solo devolveria 1 producto por empresa ya que justamente agruparia todos los productos de una misma empresa en 1.

Saludos
  #17 (permalink)  
Antiguo 29/02/2004, 20:56
 
Fecha de Ingreso: enero-2002
Mensajes: 1.872
Antigüedad: 22 años, 3 meses
Puntos: 3
gracias amigo, ya casi lo entendi. lo que no acaba de quedarme claro es lo de mostrar un solamente una vez el nombre de la empresa. como podria hacerlo? exoiste la posibilidad del select distinct¿?

salu2
  #18 (permalink)  
Antiguo 29/02/2004, 21:09
 
Fecha de Ingreso: diciembre-2003
Mensajes: 54
Antigüedad: 20 años, 4 meses
Puntos: 0
Cita:
Mensaje Original por ferranWEB
pero pq pones productos.*?? cual es la sintaxis correcta para vincular campos de diferentes tablas??

como puedo hacer ahora que no me muestre los nombre de empresas repetidos??

he leido algo del select distinct, pero no se como se hace. me ayudas?

salu2
No soy experto en MySQL, pero por lo que se no se puede vincular campos, eso serian claves foraneas que MySQL no soporta al menos hasta la version 4. Lo que hace es una "busqueda recursiva" para ponerle algun nombre, es decir revisa 2 o más tablas tomando como condiciones los datos que devuelven otras tablas.

Para no obtener nombres de empresa repetidos, tenes razon se usa DISTINCT (En el mensaje anterior puse incorrectamente GROUP BY)
http://www.mysql.com/doc/en/SELECT.html
lo mejor es la practica.

Saludos
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 12:48.