Foros del Web » Programando para Internet » PHP »

Buskeda y enlace de tablas

Estas en el tema de Buskeda y enlace de tablas en el foro de PHP en Foros del Web. Hola chicos. Tengo una idea en la cabeza y estoy batallando con ella,les explico brevemente, tengo una consulta, que se realiza por medio de una ...
  #1 (permalink)  
Antiguo 04/10/2009, 01:26
Avatar de JessicaTJ  
Fecha de Ingreso: enero-2007
Ubicación: 127.0.0.1
Mensajes: 472
Antigüedad: 17 años, 3 meses
Puntos: 25
Buskeda y enlace de tablas

Hola chicos.

Tengo una idea en la cabeza y estoy batallando con ella,les explico brevemente, tengo una consulta, que se realiza por medio de una variable que obtengo de un formulario por medio de post, esa me regresa un resultado, pero kiero que tome el dato de otra table, se que tengo que enlazar tablas, y ya hice varios intentos pero no doy con una respuesta, tengo una base de datos con 2 tablas:

products
id
part
image
vendor_id


vendors
vendor_id
name
image


Me gustaria que al momento que yo invoke un resultado de un producto, me regrese los campos del producto y ademas los campos image y name del vendor correspondiente a ese producto, la buskeda la realizo asi:


Código PHP:
"SELECT * FROM products WHERE part LIKE '%{$_POST['partno']}%'" 
Ya revise el foro y no encuentro bien como invocar el resultado con el query que realizo, llevo ya 3 dias con lo mismo y no doy bien con la respuesta.

De verdad les agradecere muchisimo su ayuda.

Mil gracias !!!
  #2 (permalink)  
Antiguo 04/10/2009, 03:40
Avatar de urgido  
Fecha de Ingreso: febrero-2005
Mensajes: 2.351
Antigüedad: 19 años, 1 mes
Puntos: 25
Respuesta: Buskeda y enlace de tablas

pues hay dos soluciones ó haces dos consultas o usas inner join....

Si eliges hacer las dos consultas entonces solo seria forma de comparar resultados. De la otra forma es más compleja pero todo lo harias en una sola consulta.
__________________
Hospedaje Web al mejor costo!
  #3 (permalink)  
Antiguo 04/10/2009, 04:05
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Buskeda y enlace de tablas

en otras palabras

Código php:
Ver original
  1. $sql = "SELECT * FROM products AS p
  2.            LEFT JOIN vendors AS v ON p.id = v.id
  3.            WHERE p.part LIKE '%{$_POST['partno']}%'";
  #4 (permalink)  
Antiguo 04/10/2009, 15:49
Avatar de JessicaTJ  
Fecha de Ingreso: enero-2007
Ubicación: 127.0.0.1
Mensajes: 472
Antigüedad: 17 años, 3 meses
Puntos: 25
Respuesta: Buskeda y enlace de tablas

Hola chicos, gracias por sus respuestas, recpecto a la solucion que me facilito samu22, lo koloke en el script y me regresa:

mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/netcos5/public_html/detailed.php on line 15

la linea 15 contiene:
Código PHP:
while($row mysql_fetch_array($result)){ 
El query lo debo colocar como me indicas samu22?

Mil gracias de nuevo chicos
  #5 (permalink)  
Antiguo 04/10/2009, 16:27
Avatar de urgido  
Fecha de Ingreso: febrero-2005
Mensajes: 2.351
Antigüedad: 19 años, 1 mes
Puntos: 25
Respuesta: Buskeda y enlace de tablas

debes jalar los resultados como arrays si es que usas la solución que te dieron arriba. Saludos
__________________
Hospedaje Web al mejor costo!
  #6 (permalink)  
Antiguo 04/10/2009, 17:35
Avatar de JessicaTJ  
Fecha de Ingreso: enero-2007
Ubicación: 127.0.0.1
Mensajes: 472
Antigüedad: 17 años, 3 meses
Puntos: 25
Respuesta: Buskeda y enlace de tablas

Y eso lo hago como disculpa urgido?

Soy principiante en esto de PHP y la verdad no me he familiarizado bien con las diferentes formas de presentar datos
  #7 (permalink)  
Antiguo 04/10/2009, 19:03
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Buskeda y enlace de tablas

lo mas probable es que haya un error en la consulta o en la conexion a la base de datos, proba poniendo esto para ver que te dice
Código php:
Ver original
  1. $result = mysql_query($sql) or die(mysql_error());

si no se puede ejecutar la consulta te va a decir cual es el error
  #8 (permalink)  
Antiguo 04/10/2009, 21:13
Avatar de JessicaTJ  
Fecha de Ingreso: enero-2007
Ubicación: 127.0.0.1
Mensajes: 472
Antigüedad: 17 años, 3 meses
Puntos: 25
Respuesta: Buskeda y enlace de tablas

Hola samu22, sip, me regreso:

Unknown column 'v.id' in 'on clause'

Ya cambie el vendor_id a vid y el query quedo:
Código PHP:
$sql "SELECT * FROM products AS p LEFT JOIN vendors AS v ON p.id = v.vid WHERE p.part LIKE '%{$_POST['partno']}%'"
Y ahora si me regreso resultados, pero ahora, como llamo a las variables para que me imprima los datos ke rekiero?

Mil gracias !!!

Última edición por JessicaTJ; 04/10/2009 a las 21:20
  #9 (permalink)  
Antiguo 04/10/2009, 21:38
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Buskeda y enlace de tablas

Cita:
Iniciado por JessicaTJ Ver Mensaje
Hola samu22, sip, me regreso:

Unknown column 'v.id' in 'on clause'

Ya cambie el vendor_id a vid y el query quedo:
Código PHP:
$sql "SELECT * FROM products AS p LEFT JOIN vendors AS v ON p.id = v.vid WHERE p.part LIKE '%{$_POST['partno']}%'"
Y ahora si me regreso resultados, pero ahora, como llamo a las variables para que me imprima los datos ke rekiero?

Mil gracias !!!
como habias hecho con fetch_array:

pero primero una pregunta

products
id
part
image
vendor_id

vendors
vid
name
image

el campo products.image es igual a vemdors.image ? porque si no lo es vas a tener comprobar si es prdoucts.image y no vendors.image, si es el mismo dato lo mas oportuno seria dejarlo en una sola tabla.

el resultado del query te va a devolver algo asi:
id | part | image | vendor_id | vid | name | image

como ves tendras image 2 veces
podrias seleccionar los campos que quieras mostrar en el query ej:

Código php:
Ver original
  1. // en ves de SELECT *
  2. $sql="SELECT p.id, part, p.image AS pimage, vid, name, v.image AS vimage
  3.          FROM products AS p
  4.          LEFT JOIN vendors AS v ON p.id = v.vid
  5.          WHERE p.part LIKE '%{$_POST['partno']}%'";
  6.  
  7. $result = mysql_query($sql) or die(mysql_error());
  8.  
  9. while($fila = mysql_fetch_assoc($result)){
  10.          echo $fila['id'].'<br/>';
  11.          echo $fila['part'].'<br/>';
  12.          echo $fila['pimage'].'<br/>';
  13.          echo $fila['vid'].'<br/>';  
  14.          //etc
  15. }
  16.  
  17.  
  18.  
  19.  
  20. ;
  #10 (permalink)  
Antiguo 04/10/2009, 23:39
Avatar de JessicaTJ  
Fecha de Ingreso: enero-2007
Ubicación: 127.0.0.1
Mensajes: 472
Antigüedad: 17 años, 3 meses
Puntos: 25
Respuesta: Buskeda y enlace de tablas

Hola samu22

Nop, los campos son totalmente diferentes

el campo de image de products es una imagen del producto, mientras que la imagen del vendor es el logo del vendedor, cosas muy diferentes.

La base de datos kedo asi:

products
id
part
image
vid


vendors
vid
name
image


Lo koloko como me indicaste?
  #11 (permalink)  
Antiguo 05/10/2009, 02:32
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Buskeda y enlace de tablas

Cita:
Iniciado por JessicaTJ Ver Mensaje
Hola samu22

Nop, los campos son totalmente diferentes

el campo de image de products es una imagen del producto, mientras que la imagen del vendor es el logo del vendedor, cosas muy diferentes.

La base de datos kedo asi:

products
id
part
image
vid


vendors
vid
name
image


Lo koloko como me indicaste?
si vas a tener que especificar un alias (AS) para el campo image antes de seleccionarlo porque sino cuando hagas la consulta te va a devolver dos veces el mismo campo solapando el primero, osea si haces un SELECT * FROM con mysql_fetch_array o mysql_fetch_assoc te va a devolver algo como esto

Cita:

(
[id] => 1
[part] => 0
[image] => image_vendor
[vid] => 1
[name] => Samuel Jackson
)
  #12 (permalink)  
Antiguo 05/10/2009, 09:03
Avatar de JessicaTJ  
Fecha de Ingreso: enero-2007
Ubicación: 127.0.0.1
Mensajes: 472
Antigüedad: 17 años, 3 meses
Puntos: 25
Respuesta: Buskeda y enlace de tablas

Muchas gracias por tu respuesta samu22, disculpa, como hago lo ke me indicas? Podrias plis darme mas o menos una pista de como hacerlo?

Gracias !!!
  #13 (permalink)  
Antiguo 05/10/2009, 09:08
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Buskeda y enlace de tablas

arriba te lo habia comentado, pero te lo recuerdo:

Código php:
Ver original
  1. // en ves de SELECT *
  2. $sql="SELECT p.id, part, p.image AS pimage, vid, name, v.image AS vimage
  3.          FROM products AS p
  4.          LEFT JOIN vendors AS v ON p.id = v.vid
  5.          WHERE p.part LIKE '%{$_POST['partno']}%'";
  6.  
  7. $result = mysql_query($sql) or die(mysql_error());
  8.  
  9. while($fila = mysql_fetch_assoc($result)){
  10.          echo $fila['id'].'<br/>';
  11.          echo $fila['part'].'<br/>';
  12.          echo $fila['pimage'].'<br/>';
  13.          echo $fila['vid'].'<br/>';  
  14.          //etc
  15. }

explicacion:
Código sql:
Ver original
  1. SELECT p.id, part, p.image AS pimage, vid, name, v.image AS vimage
se seleccionara:
products.id
products.part
products.image como pimage
vendors.vid
vendors.name
vendors.image como vimage


el resultado del query seria
--------------------------------------------------
id | part | pimage | vid | name | vimage
--------------------------------------------------
  #14 (permalink)  
Antiguo 05/10/2009, 10:01
Avatar de JessicaTJ  
Fecha de Ingreso: enero-2007
Ubicación: 127.0.0.1
Mensajes: 472
Antigüedad: 17 años, 3 meses
Puntos: 25
Respuesta: Buskeda y enlace de tablas

Gracias samu22, ya coloke como me indicaste e hice los movimientos, pero me regresa este error:

Column 'vid' in field list is ambiguous

Estuve investigando y veo que es error porke el dato existe en ambas tablas, como podria arreglarlo?

Se supone que el campo vid en products es una referencia al campo vid en vendors

Gracias !!!
  #15 (permalink)  
Antiguo 05/10/2009, 10:06
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Buskeda y enlace de tablas

Cita:
Iniciado por JessicaTJ Ver Mensaje
Gracias samu22, ya coloke como me indicaste e hice los movimientos, pero me regresa este error:

Column 'vid' in field list is ambiguous

Estuve investigando y veo que es error porke el dato existe en ambas tablas, como podria arreglarlo?

Se supone que el campo vid en products es una referencia al campo vid en vendors

Gracias !!!
si, no me di cuenta, dice que es ambiguo porque esta en las dos tablas, cuando haces el SELECT ... vid no esta especificado a que tabla, aunque el valor sea el mismo, al momento de hacer el select no se sabe si es el mismo valor por lo que tendria que modificarle v.vid asi sabe que es el campo de la tabla vendors
  #16 (permalink)  
Antiguo 05/10/2009, 10:11
Avatar de JessicaTJ  
Fecha de Ingreso: enero-2007
Ubicación: 127.0.0.1
Mensajes: 472
Antigüedad: 17 años, 3 meses
Puntos: 25
Respuesta: Buskeda y enlace de tablas

Hola samu22, entonces kedaria algo asi:

Código PHP:
$sql="SELECT p.id, part, p.image AS pimage, v.vid, name, v.image AS vimage FROM products AS p LEFT JOIN vendors AS v ON p.id = v.vid WHERE p.part LIKE '%{$_POST['partno']}%'"
Verdad? O me ekivoko?
  #17 (permalink)  
Antiguo 05/10/2009, 10:18
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Buskeda y enlace de tablas

Cita:
Iniciado por JessicaTJ Ver Mensaje
Hola samu22, entonces kedaria algo asi:

Código PHP:
$sql="SELECT p.id, part, p.image AS pimage, v.vid, name, v.image AS vimage FROM products AS p LEFT JOIN vendors AS v ON p.id = v.vid WHERE p.part LIKE '%{$_POST['partno']}%'"
Verdad? O me ekivoko?
claro, igualmente probalo, no te va a quemar el procesador por correr la consulta
  #18 (permalink)  
Antiguo 05/10/2009, 10:21
Avatar de JessicaTJ  
Fecha de Ingreso: enero-2007
Ubicación: 127.0.0.1
Mensajes: 472
Antigüedad: 17 años, 3 meses
Puntos: 25
Respuesta: Buskeda y enlace de tablas

xD sip, no pasa nada con correrlo ya lo hice, y ahora si me regresa resultados, pero, sigue sin enviarme los datos del nombre del vendor, esta variable la llamo asi:

Código PHP:
$result mysql_query($sql) or die(mysql_error());
 
while(
$fila mysql_fetch_assoc($result)){
         echo 
$fila['name'].'<br/>';

Estoy haciendo algo mal?
  #19 (permalink)  
Antiguo 05/10/2009, 10:29
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Buskeda y enlace de tablas

Cita:
Iniciado por JessicaTJ Ver Mensaje
xD sip, no pasa nada con correrlo ya lo hice, y ahora si me regresa resultados, pero, sigue sin enviarme los datos del nombre del vendor, esta variable la llamo asi:

Código PHP:
$result mysql_query($sql) or die(mysql_error());
 
while(
$fila mysql_fetch_assoc($result)){
         echo 
$fila['name'].'<br/>';

Estoy haciendo algo mal?
usa phpmyadmin y proba la consulta sola, fijate si esta no esta vacio ese campo en la tabla vendors

proba esto y mostrame lo que te devuelve
Código php:
Ver original
  1. while($fila = mysql_fetch_assoc($result)){
  2.          $r[]=$fila
  3. }
  4.  
  #20 (permalink)  
Antiguo 05/10/2009, 10:34
Avatar de JessicaTJ  
Fecha de Ingreso: enero-2007
Ubicación: 127.0.0.1
Mensajes: 472
Antigüedad: 17 años, 3 meses
Puntos: 25
Me regreso un error de sintaxis

Mire la estructura de la tabla y contiene 10 registros, en los cuales el campo name todos tienen datos.

Listo, problema resuelto xD

Era un error en la sintaxis de SQL, en la parte donde decia:
Código PHP:
AS v ON p.id v.vid WHERE 
Deveria ser:

Código PHP:
AS v ON p.vid v.vid WHERE 
Mil gracias por tu ayuda samu22 !!!!

Última edición por GatorV; 05/10/2009 a las 11:15
  #21 (permalink)  
Antiguo 05/10/2009, 10:57
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Respuesta: Buskeda y enlace de tablas

Cita:
Iniciado por JessicaTJ Ver Mensaje
Listo, problema resuelto xD

Era un error en la sintaxis de SQL, en la parte donde decia:
Código PHP:
AS v ON p.id v.vid WHERE 
Deveria ser:

Código PHP:
AS v ON p.vid v.vid WHERE 
Mil gracias por tu ayuda samu22 !!!!

buenisimo exitos
  #22 (permalink)  
Antiguo 05/10/2009, 14:14
Avatar de JessicaTJ  
Fecha de Ingreso: enero-2007
Ubicación: 127.0.0.1
Mensajes: 472
Antigüedad: 17 años, 3 meses
Puntos: 25
Respuesta: Buskeda y enlace de tablas

Una ultima preguntita samu22.

Si necesito enlazar otra tabla mas, una tabla de categorias, necesito seguir el mismo procedimiento, nada mas agregar al SQL la nueva tabla y demas?

Mil Gracias !!!
  #23 (permalink)  
Antiguo 05/10/2009, 15:06
 
Fecha de Ingreso: abril-2008
Mensajes: 453
Antigüedad: 16 años
Puntos: 16
Cita:
Iniciado por JessicaTJ Ver Mensaje
Una ultima preguntita samu22.

Si necesito enlazar otra tabla mas, una tabla de categorias, necesito seguir el mismo procedimiento, nada mas agregar al SQL la nueva tabla y demas?

Mil Gracias !!!
podes hacer otro join mas lo unico que tenes que tener en cuenta es un campo de referencia que una (de unir) una tabla con otra

osea que si tenes una tabla

category

id
name
product_id

podrias hacer un join de la siguiente forma
Código php:
Ver original
  1. $sql="  SELECT p.id, part, p.image AS pimage, v.vid, name, v.image AS vimage, c.id AS cat_id, c.name AS cat_name
  2.         FROM products AS p
  3.        LEFT JOIN vendors AS v ON p.vid = v.vid
  4.         LEFT JOIN category AS c ON p.id = c.product_id
  5.         WHERE p.part LIKE '%{$_POST['partno']}%'";
te va a dovolver algo como
---------------------------------------------------------------
id|part|pimage|vid|name|vimage|cat_id|cat_name
---------------------------------------------------------------

el unico requisito para crear estas uniones es tener un campo de referencia entre 2 tablas


Última edición por GatorV; 05/10/2009 a las 21:45
  #24 (permalink)  
Antiguo 06/10/2009, 00:47
Avatar de JessicaTJ  
Fecha de Ingreso: enero-2007
Ubicación: 127.0.0.1
Mensajes: 472
Antigüedad: 17 años, 3 meses
Puntos: 25
Gracias Samu22, lo pruebo y te digo como me fue

Mil gracias de nuevo !!!

mil gracias Samu22 !!!

Funciona perfectamente bien, ahora si ya entendi la dinamica y la puedo aplicar bien gracias a ti

Mil gracias de nuevo !!!!!!!!!!

Última edición por GatorV; 06/10/2009 a las 13:52
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 19:51.