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

como consultar en dos tablas y como mostrar el resultado?

Estas en el tema de como consultar en dos tablas y como mostrar el resultado? en el foro de Mysql en Foros del Web. Ola por favor nesecito ayuda, lo que estoy haciendo es consultar en dos tablas distintas una es categorias.tipo (alli puedo agregar o borrar categorias que ...
  #1 (permalink)  
Antiguo 29/08/2006, 09:50
 
Fecha de Ingreso: febrero-2004
Ubicación: argentina
Mensajes: 203
Antigüedad: 20 años, 2 meses
Puntos: 0
como consultar en dos tablas y como mostrar el resultado?

Ola por favor nesecito ayuda, lo que estoy haciendo es consultar en dos tablas distintas una es categorias.tipo (alli puedo agregar o borrar categorias que se mostraran en mi carrito) y la otra es productos.tipo
lo que quiero hacer es (en la parte de administracion del carrito)
mostrar las distintas categorias y la cantidad de productos que tiene cada categoria obteniendo esta cantidad de la tabla productos (osea productos.tipo)
bueno esto es lo que hice no se si esta bien ,pues no me funciona,por que ademas no se como mostrarlos , ya prove de mil maneras, pero nada, bueno esto es lo que hice , este es parte de codigo, por favor si alguien me puede decir en que me estoy equivocando ?


$Host = "localhost";
$User = "root";
$Password = "";
$DBName = "solocarrito";


$Link = mysql_connect ($Host, $User, $Password);

$Query = "SELECT categorias.tipo, catalogos.tipo, COUNT(catalogos.tipo) FROM categorias, catalogos GROUP BY tipo";
$Result = mysql_db_query ($DBName, $Query, $Link);



//busca los resultados de la base de datos y los imprime
while ($Row = mysql_fetch_array
($Result)) {
//aca no se como hacer para que semuestren!!
//quiero que se muestre el tipo que viene de la tabla categoria
//y la cantidad de productos que viene de la consulta que viene de la tabla productos

print ("<INPUT type='radio' CHECKED value='".$Row['tipo']."' name='tipoarch'>".$Row['tipo']." - COUNT(*) productos <br>\n");
}
print ("<br>
<p align='center'><input type='submit' name='submit' value='VER'>
</form>
</td>\n");
print ("</tr>\n");
print ("</table>\n");

bueno muchas gracias y saludos!!!!!
  #2 (permalink)  
Antiguo 29/08/2006, 11:54
 
Fecha de Ingreso: agosto-2006
Mensajes: 121
Antigüedad: 17 años, 8 meses
Puntos: 0
Primero hablas de productos y luego en el código veo que no usas esa tabla sino una de catalogos. Suponiendo que son la misma cosa, y que la tabla se llama realmente catalogos, una consulta que puede servirte sería:

select categorias.tipo, count(catalogos.tipo) from Categorias inner join catalogos on Categorias.tipo=productos.categoria group by categorias.tipo

Nota: Lo que está en negrita se supone que es lo que enlaza la tabla (estamos cruzando dos tablas (inner join) sacando las filas en las cuales coincide la categoria.). O sea, supongo que tienes un campo (que yo he llamado productos.categoria) que enlaza con la tabla de categorias, por lo que deberás poner el campo que enlaza. Por lo demás, si no he entendido mal tu pregunta, la consulta es ésa. Luego, el tratamiento/presención con PHP/HTML ya lo dejo para ti.

Suerte.
  #3 (permalink)  
Antiguo 29/08/2006, 11:55
 
Fecha de Ingreso: agosto-2006
Mensajes: 121
Antigüedad: 17 años, 8 meses
Puntos: 0
Primero hablas de productos y luego en el código veo que no usas esa tabla sino una de catalogos. Suponiendo que son la misma cosa, y que la tabla se llama realmente catalogos, una consulta que puede servirte sería:

select categorias.tipo, count(catalogos.tipo) from Categorias inner join catalogos on Categorias.tipo=productos.categoria group by categorias.tipo

Nota: Lo que está en negrita se supone que es lo que enlaza la tabla (estamos cruzando dos tablas (inner join) sacando las filas en las cuales coincide la categoria.). O sea, supongo que tienes un campo (que yo he llamado productos.categoria) que enlaza con la tabla de categorias, por lo que deberás poner el campo que enlaza. Por lo demás, si no he entendido mal tu pregunta, la consulta es ésa. Luego, el tratamiento/presención con PHP/HTML ya lo dejo para ti.

Suerte.
  #4 (permalink)  
Antiguo 30/08/2006, 09:02
 
Fecha de Ingreso: febrero-2004
Ubicación: argentina
Mensajes: 203
Antigüedad: 20 años, 2 meses
Puntos: 0
en realidad va asi, lo que pas aes que qyuise ser mas clara y me olvide cambiar el el codigo, es asi:

categorias.tipo

$Host = "localhost";
$User = "root";
$Password = "";
$DBName = "solocarrito";


$Link = mysql_connect ($Host, $User, $Password);

$Query = "SELECT categorias.tipo, catalogos.tipo, COUNT(catalogos.tipo) FROM categorias, catalogos GROUP BY tipo";
$Result = mysql_db_query ($DBName, $Query, $Link);



//busca los resultados de la base de datos y los imprime
while ($Row = mysql_fetch_array
($Result)) {
//aca no se como hacer para que semuestren!!
//quiero que se muestre el tipo que viene de la tabla categoria
//y la cantidad de productos que viene de la consulta que viene de la tabla productos

print ("<INPUT type='radio' CHECKED value='".$Row['tipo']."' name='tipoarch'>".$Row['tipo']." - COUNT(*) productos <br>\n");
}
print ("<br>
<p align='center'><input type='submit' name='submit' value='VER'>
</form>
</td>\n");
print ("</tr>\n");
print ("</table>\n");

no quiero abusar de tu amabilidad pero , como se daria cuenta php, cuando mostrar los datos , de una tbla o de otra
, ya que las 2 se llaman tipo osea una es de categorias.tipo y la otra es catalogos.tipo, ahi es donde me paro
por que antes recuperaba los datos asi pero estaba consultando a 1 taabla ,

".$Row['tipo']."

pero ahora no se como decirle a php que quiero que en cierto lugar muestgre , los datos de catalogos.tipo y en otro los de categorias.tipo, bueno espero haber sido clara, sino te pido disculpas,.....
bueno ahora voy a provar con lo que me digiste, muchas gracias !!!
saludos!!!
  #5 (permalink)  
Antiguo 31/08/2006, 23:49
Usuario baneado!
 
Fecha de Ingreso: marzo-2006
Ubicación: Cd. de México
Mensajes: 44
Antigüedad: 18 años
Puntos: 0
http://www.programacion.com/php/articulo/bbdd_disenyo/
  #6 (permalink)  
Antiguo 01/09/2006, 05:32
 
Fecha de Ingreso: junio-2004
Ubicación: Stgo, Chile
Mensajes: 51
Antigüedad: 19 años, 10 meses
Puntos: 0
Holas!
mira, lo que tienes que hacer es usar AS para diferenciar cada campo. Ejemplo:

SELECT categorias.tipo AS tipo_categorias, catalogos.tipo AS tipo_catalogos, COUNT(catalogos.tipo) AS cuantos FROM categorias, catalogos GROUP BY catalogos.tipo

Así, después desde PHP lo llamas asi: $Row['tipo_categorias'] o $Row['tipo_catalogos']

Ademas te recomiendo implementar tu SQl con la clausula JOIN tal como te lo indicaron en un mensaje anterior. (si es que la version de mysql te lo permite)

El GROUP BY tambien debes especificarlo.

Saludos,
Victoria
  #7 (permalink)  
Antiguo 01/09/2006, 10:29
 
Fecha de Ingreso: febrero-2004
Ubicación: argentina
Mensajes: 203
Antigüedad: 20 años, 2 meses
Puntos: 0
creo que no me permite por que cuando uso JOIN no aparece nada, ahora voy a provar lo que me dices, mira esto es lo que estube haciendo, si le puedes hechar un ojo,? y decirme si voy bien o no, te lo agradeceria.

lo que quiero hacer es (en la parte de administracion del carrito)
mostrar las distintas categorias y la cantidad de tipo de productos que tiene almacenado cada categoria obteniendo esta cantidad de la tabla catalogos (osea catalogos.tipo , ej: la categoria artesanias tiene 5 artesanias, la categoria ofertas tiene 2 ofertas,etc)

bueno esto es lo que hice pero no me funciona , ya prove de mil maneras, pero nada, bueno este es parte de codigo, por favor si alguien me puede decir en que me estoy equivocando ?


$Host = "localhost";
$User = "root";
$Password = "";
$DBName = "solocarrito";


$Link = mysql_connect ($Host, $User, $Password);

$Query = "SELECT categorias.tipo, COUNT(catalogos.tipo) FROM categorias INNER JOIN catalogos ON Categorias.tipo=catalogos.tipo GROUP BY tipo";

$Result = mysql_db_query ($DBName, $Query, $Link);



//busca los resultados de la base de datos y los imprime
while ($Row = mysql_fetch_array
($Result)) {
//aca no se como hacer para que semuestren ,simplemente no se muestra nada!!

//quiero que se muestre el tipo de categoria que viene de la tabla categoria

//y la cantidad de productos almacenados que tiene cada categoria que viene de la consulta de la tabla catalogos

//esta bien mostrarlos asi?, bueno ,no me funciona pero no se porque, porfa ayuda

print ("<INPUT type='radio' CHECKED value='".$Row['tipo']."' name='tipoarch'>".$Row['tipo']." - ".COUNT(catalogos.tipo)." productos <br>\n");
}
print ("<br>
<p align='center'><input type='submit' name='submit' value='VER'>
</form>
</td>\n");
print ("</tr>\n");
print ("</table>\n");

bueno muchas gracias y saludos!!!!!
ahora voy a provasr con lo que me dijiste,gracias y saludos!!
  #8 (permalink)  
Antiguo 03/09/2006, 14:27
 
Fecha de Ingreso: febrero-2004
Ubicación: argentina
Mensajes: 203
Antigüedad: 20 años, 2 meses
Puntos: 0
hola mira estube provando, y consultando asi:

$Link = mysql_connect ($Host, $User, $Password);
$Query = "SELECT categorias.tipo, COUNT(catalogos.tipo) AS cuantos FROM categorias join catalogos GROUP BY categorias.tipo";
$Result = mysql_db_query ($DBName, $Query, $Link);


me muestra todas las categoria , de la tabla categorias,pero a todos le pone la cantidad total de todos los productos que tengo almacenado en la tabla catalogos, y no por categoria que es lo que quiero, esto es lo que muestra:

animalitos - 12 productos
artesanias - 12 productos
especiales - 12 productos
gratis - 12 productos
musica - 12 productos
ofertas - 12 productos
promociones - 12 productos
trueque - 12 productos
varios - 12 productos
zapatos - 12 productos

-------------------

- ahora si hago la consulta asi, no me sale absolutamente nada, osea si uso ON:

on categorias.tipo=catalogos.tipo

ASI:

$Query = "SELECT categorias.tipo, COUNT(catalogos.tipo) AS cuantos FROM categorias join catalogos on categorias.tipo=catalogos.tipo GROUP BY categorias.tipo";


---------------------------

ahora si hago la consulta asi utilizando WHERE:

$Query = "SELECT categorias.tipo, COUNT(catalogos.tipo) AS cuantos FROM categorias join catalogos WHERE categorias.tipo=catalogos.tipo GROUP BY tipo";

Aparentemente si funciona, pues muestra esto, pero... :


animalitos - 2 productos
artesanias - 4 productos
gratis - 1 productos
ofertas - 1 productos
promociones - 3 productos


pero me faltan categorias?! que no tienen todavia productos,osea que la categoria existe en la tabla categorias, pero no hay ningun producto almacenado en la tabla catalogos que pertenesca a esa categoria, por que puede ser?


se podra hacer que se muestren todas las categorias de la tabla categorias aunque no tengan aun productos almacenados y que diga que tiene 0 (cero) productos?

por favor nececito orientacion al respecto, saludos!
  #9 (permalink)  
Antiguo 04/09/2006, 08:49
 
Fecha de Ingreso: junio-2004
Ubicación: Stgo, Chile
Mensajes: 51
Antigüedad: 19 años, 10 meses
Puntos: 0
nena, el problema que veo en tu query es que el GROUP BY lo haces por un campo que no corresponde. Debe ser por el mismo campo que va en el COUNT().

Esto debiera funcionarte:
$Query = "SELECT categorias.tipo, COUNT(catalogos.tipo) AS cuantos
FROM categorias
LEFT JOIN catalogos on categorias.tipo=catalogos.tipo
GROUP BY catalogos.tipo";

Suerte!
Victoria
  #10 (permalink)  
Antiguo 05/09/2006, 08:01
 
Fecha de Ingreso: febrero-2004
Ubicación: argentina
Mensajes: 203
Antigüedad: 20 años, 2 meses
Puntos: 0
hola victoria , ahora voy a provar con lo que tu me dices , pero por si acao te pregunto : tu dices a que no me salen todas las categorias por eso?por que te cuento que asi me funciona ,solo que no me da o muestra todas las categoriar de la tabl categoria , pense que tal vez era por que mysql no tenia con que relacionarla , bueno ,no se si estoy en lo correcto, ??..mmm, bueno mira asi me muestra solo las categorias que tienen productos y la cantidad de productos de dichas categorias, pero no me muestra las que no tienen productos, esto es lo que hice:

si hago la consulta asi utilizando WHERE:

$Query = "SELECT categorias.tipo, COUNT(catalogos.tipo) AS cuantos FROM categorias join catalogos WHERE categorias.tipo=catalogos.tipo GROUP BY tipo";

//Aparentemente si funciona, pues muestra esto, pero como te dije solo me esta mostrando las categorias que tienen productos , a las categorias de la table categorias que no tienen productos almacenados en la tabla catalogos , las omite, no las muestra... :


animalitos - 2 productos
artesanias - 4 productos
gratis - 1 productos
ofertas - 1 productos
promociones - 3 productos


pero me faltan categorias,
igualmente gracias , y voy a provar con la que me dices, aver si asi se muestran todas las categorias incluso las que no tienen productos, 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 03:35.