Doble consulta mysql..

Iniciado por mokoMonster, 6 Agosto 2010, 21:34 PM

0 Miembros y 2 Visitantes están viendo este tema.

mokoMonster

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><bImagen </b></td><td><bArticulo </b></td><td><bDescripci&#243;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
"Se necesitaron unos instantes para cortarle la cabeza, pero se necesitara un siglo para producir otra igual."
Lagrange

Shell Root

#1
Consulta sobre INNER JOIN en mysql. Por ejemplo:
Código (sql) [Seleccionar]

-- Catalogo
  -- id_catalogo, nombre_catalogo, id_imagen

-- Imagenes
  -- id_imagen, url_imagen

SELECT id_catalogo, url_imagen
 FROM Catalogo
   INNER JOIN Imagenes
     ON Imagenes.id_imagen = Catalogo.id_imagen
WHERE (id_catalogo = 1)
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

mokoMonster

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
"Se necesitaron unos instantes para cortarle la cabeza, pero se necesitara un siglo para producir otra igual."
Lagrange

Shell Root

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.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

mokoMonster

Ok, pongo la estructura de las tablas.



-- 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 ;


-- 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 :)


"Se necesitaron unos instantes para cortarle la cabeza, pero se necesitara un siglo para producir otra igual."
Lagrange

Shell Root

Entonces sería más o menos así.
Código (sql) [Seleccionar]
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.id = 1)

Printea la salida que te dá esta query.
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

mokoMonster

#6
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 :(

WHERE(Catalogo.noArticulo = '".$busqueda."') ???
Nop, no funciona asi :(
"Se necesitaron unos instantes para cortarle la cabeza, pero se necesitara un siglo para producir otra igual."
Lagrange

Shell Root

Debe de funcionar, en la variable $busqueda, que se almacena?. Supongo que es el código del articulo o no?
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.

mokoMonster

#8
Almacena el nombre del articulo, por ejemplo, si yo busco "bebida" = $busqueda..

Mira de hecho si la sentencia es:

$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 :(



"Se necesitaron unos instantes para cortarle la cabeza, pero se necesitara un siglo para producir otra igual."
Lagrange

Shell Root

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?
Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.