Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: mokoMonster en 6 Agosto 2010, 21:34 pm



Título: Doble consulta mysql..
Publicado por: mokoMonster en 6 Agosto 2010, 21:34 pm
Buenas  ::)

Hice una consulta que busca el articulo seleccionado por el usuario, pero tengo 2 tablas, 1) Catalogo y 2) Imagenes.. Lo que quiero es imprimir la imagen de el articulo correspondiente.

session_start();
include("/secure/conex.php");
$link=Conectarse();
$busqueda=$_POST['busqueda'];
$query=mysql_query("SELECT * FROM Catalogo WHERE noArticulo='".$busqueda."'",$link) or die(mysql_error());

<table width="80%" bgcolor="#CCCCCC" border="1" align="center" cellpadding="2" cellspacing="0" aling="center">
<tr><td><b> Imagen </b></td><td><b> Articulo </b></td><td><b> Descripción </b></td><td><b> Cantidad </b></td><td><b> Precio </b> </td></tr>
    <?php
$qur = mysql_num_rows($query);
if($qur > 0) {
while($row=mysql_fetch_array($query))
{
printf("<tr><td><b><center> %s </center></b></td><td> %s </td><td> %s </td><td><center> %d </center></td><td> %d </td></tr>",$row['imagen'],$row['noArticulo'],$row['descripcion'],$row['cantidad'],$row['precio']);
}
mysql_free_result($query);
mysql_close($link);
}
else
{
echo "No se encontraron resultados";
echo "<br /><br />";
}
?>
    </table>   
Obviamente $row['imagen'] debe de incluir la ruta de la imagen, se que tengo que hacer una consulta a la tabla imagenes, pero lo que no se me ocurre es como incluirla en $row['imagen'].

Saludos


Título: Re: Doble consulta mysql..
Publicado por: Shell Root en 6 Agosto 2010, 21:46 pm
Consulta sobre INNER JOIN en mysql. Por ejemplo:
Código
  1. -- Catalogo
  2.   -- id_catalogo, nombre_catalogo, id_imagen
  3.  
  4. -- Imagenes
  5.   -- id_imagen, url_imagen
  6.  
  7. SELECT id_catalogo, url_imagen
  8.  FROM Catalogo
  9.    INNER JOIN Imagenes
  10.      ON Imagenes.id_imagen = Catalogo.id_imagen
  11. WHERE (id_catalogo = 1)


Título: Re: Doble consulta mysql..
Publicado por: mokoMonster en 6 Agosto 2010, 22:07 pm
Muchas gracias por eso, ya leí un poco, pero parece que no le he entendido muy bien, intente lo siguiente:

$query=mysql_query("SELECT * FROM Catalogo INNER JOIN Imagenes ON Imagenes.rutaImagen = Catalogo.noArticulo WHERE noArticulo='".$busqueda."'",$link) or die(mysql_error());
Pero me devuelve: Column 'noArticulo' in where clause is ambiguous..

Que estoy haciendo mal? O que no entiendo?

Saludos


Título: Re: Doble consulta mysql..
Publicado por: Shell Root en 6 Agosto 2010, 22:28 pm
Si te fijas en el ejemplo que te deje, use el mismo campo (por el cual se relacionan las tablas), para poder identificar de cual registro es esa imagen. Lo que vos tenes no cumple con esa condición. Muestranos las estructuras de esas 2 tablas o mejor por que campo se relacionan.


Título: Re: Doble consulta mysql..
Publicado por: mokoMonster en 6 Agosto 2010, 22:34 pm
Ok, pongo la estructura de las tablas.



Código:
-- Table structure for table `Catalogo`
--

CREATE TABLE `Catalogo` (
  `id` bigint(20) NOT NULL auto_increment,
  `propietarioArticulo` char(10) collate latin1_general_ci NOT NULL,
  `noArticulo` char(45) collate latin1_general_ci NOT NULL,
  `descripcion` varchar(350) collate latin1_general_ci NOT NULL,
  `tipo` varchar(45) collate latin1_general_ci NOT NULL,
  `fechaAltaArticulo` date NOT NULL,
  `cantidad` int(3) NOT NULL,
  `precio` decimal(6,2) NOT NULL,
  `ipAltaArticulo` char(15) collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=85 ;

Código:
-- Table structure for table `Imagenes`
--

CREATE TABLE `Imagenes` (
  `id` bigint(4) NOT NULL auto_increment,
  `usuarioImagen` varchar(10) collate latin1_general_ci NOT NULL,
  `noArticulo` varchar(25) collate latin1_general_ci NOT NULL,
  `rutaImagen` varchar(65) collate latin1_general_ci NOT NULL,
  `dateUploadImage` date NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=27 ;


Y se relacionan por el nombre del articulo, que es noArticulo.


De verdad muchas gracias por tu ayuda :)




Título: Re: Doble consulta mysql..
Publicado por: Shell Root en 6 Agosto 2010, 22:46 pm
Entonces sería más o menos así.
Código
  1. SELECT Catalogo.id AS 'Código', Catalogo.noArticulo AS 'Código Articulo', Imagenes.rutaImagen AS 'Ruta Imagen'
  2.  FROM Catalogo
  3.    INNER JOIN Imagenes ON Imagenes.noArticulo  = Catalogo.noArticulo
  4. WHERE(Catalogo.id = 1)
Printea la salida que te dá esta query.


Título: Re: Doble consulta mysql..
Publicado por: mokoMonster en 6 Agosto 2010, 22:50 pm
Bueno este ya no me tira error, eso es bueno :) Muuuchas Gracias :)
Pero el codigo me queda inservible para la busqueda de los usuarios, en donde podria colocar $busqueda?

La verdad es que aun ando confundido :(

Código:
WHERE(Catalogo.noArticulo = '".$busqueda."')
???
Nop, no funciona asi :(


Título: Re: Doble consulta mysql..
Publicado por: Shell Root en 6 Agosto 2010, 22:58 pm
Debe de funcionar, en la variable $busqueda, que se almacena?. Supongo que es el código del articulo o no?


Título: Re: Doble consulta mysql..
Publicado por: mokoMonster en 6 Agosto 2010, 22:59 pm
Almacena el nombre del articulo, por ejemplo, si yo busco "bebida" = $busqueda..

Mira de hecho si la sentencia es:

Código:
$query=mysql_query("SELECT Catalogo.id AS 'Código', Catalogo.noArticulo AS 'Código Articulo', Imagenes.rutaImagen AS 'Ruta Imagen'
  FROM Catalogo
    INNER JOIN Imagenes ON Imagenes.noArticulo  = Catalogo.noArticulo
WHERE(Catalogo.noArticulo = '$busqueda')",$link)
Y doy en el buscador "BEBIDA" devuelve una fila pero con la imagen rota y los demas campos vacios.

Lo de la imagen es porque todavia no pongo bien el codigo de eso, pero lo demas no debe estar vacio :(





Título: Re: Doble consulta mysql..
Publicado por: Shell Root en 6 Agosto 2010, 23:10 pm
WTF? entonces las 2 tablas, se relacionan por medio del nombre? o.O!, debería ser por el ID!
PD: Est@s seguro de que estan relacionadas?


Título: Re: Doble consulta mysql..
Publicado por: mokoMonster en 7 Agosto 2010, 01:08 am
Ohh ok ok, ahora entiendoooo xD
Ok, bueno tengo que hacer un nuevo script..

Saludos.