[SOLUCIONADO] MySQL COUNT de Una tabla basandose en otra tabla

Iniciado por stekor, Marzo 15, 2014, 12:31:44 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Marzo 15, 2014, 12:31:44 AM Ultima modificación: Agosto 17, 2014, 11:48:04 AM por Expermicid
Hola chicos
Nesecito su ayuda para sacar el COUNT de esto, no se si se pueda
estructuta

TABLA 'seccion'
____________________
|                |                     |
| seccion    |    libro_id     |
|________|___________|
|   A2         |      2              |
|   A2         |     3               |
|   B3         |     4               |
|   B3         |     5               |



TABLA 'libros'
_________________________________
|                |                      |                       |
|      id       |       libro         |        type       |
|________|___________ |___________|
|     2         |       rojo          |   adulto         |
|     3         |Tres enanitos  |   infantil        |
|     4         |     blanca        |   infantil        |
|     5         |     Juanito      |    infantil        |




$seccion = 'B3';
$search = 'blanca';

$libroseccion = ("SELECT * FROM seccion WHERE seccion  = ''.$seccion.''");

$cantida = mysql_query("SELECT COUNT(*) FROM libros WHERE libro  LIKE '%".$search."%' AND type = 'infantil' AND id = '".$libroseccion['libro_id']."'");

o

algo como esto
$cantida = mysql_query("SELECT COUNT(libros.*) FROM libros, seccion WHERE libros.libro LIKE '%".$search."%' AND libros.type = 'infantil' AND seccion.seccion = '".$seccion."'");


algo asi
lo que quiero es que muestrela cantidad(numero) de libros que el nombre contenga la palabra BLANCA  y type sea infantil pero que se encuentre en la seccion B3

si me pudiesen ayudar se los agradeseria mucho, gracias de antemano.

la primero variable llamada cantidad, no esta tan errada. La segunda variable si esta errada.

De cualquier forma, te aconsejo que para probar las consultas utilizes directamente mysql, por ejemplo en un phpmyadmin, o si tenes acceso por consola a mysql tambien lo podes probar, se te va a ser mas facil y rapido....

En este momento no tengo acceso a nada para probar y darte la consulta correcta.

Sin embargo fijate si pones solamente esto:
Código: php
SELECT COUNT(*) FROM libros WHERE libro  LIKE '%".$search."%'
Primero...Fijate si ahi funciona bien, Si lo pongas en algun sistema de los que te dije remplaza la variable $search por lo que quieras buscar.

Si llega a funcionar.. prueba.. asi...
Código: php
SELECT COUNT(*) FROM libros WHERE (libro  LIKE '%".$search."%') AND (type = 'infantil') AND (id = '".$libroseccion['libro_id']."')



Mayo 14, 2014, 11:12:02 AM #2 Ultima modificación: Mayo 14, 2014, 11:19:30 AM por Alexander1712
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
lo que quiero es que muestrela cantidad(numero) de libros que el nombre contenga la palabra BLANCA  y type sea infantil pero que se encuentre en la seccion B3

Lo que tu necesitas es una consulta múltiple, vos queres que de los libros que coincidan con la sección b3, se cuenten aquellos que sean infantil y que cumplan con la busqueda?

1º quiero agregar una cosa, tu tabla está mal hecha, los tipos deberían estar en otra tabla que se llame tipos y usar un id para identificarlos (por cuestiones de normalización), y para unir la tabla de secciones con la de libros necesitarías una tabla intermedia, crearle un id a la seccion y luego un nombre, entonces crear una tabla intermediaria que una ambas. dejando esto de lado te respondo como están las tablas actualmente

Código: php

SELECT COUNT(l.id) FROM libros AS l WHERE (l.libro  LIKE '%".$search."%') AND (l.type = 'infantil') AND (s.seccion = 'B3') LEFT JOIN seccion AS s ON l.id = s.libro_id


aunque la consulta está bastante rebuscada porque tu estructura de tablas está mal hecha por lo que cuesta hacer una consulta clara, de igual manera debería funcionar.

cualquier cosa me dices.

Saludos!

PD: lamento la tardanza en responder.

PD2: No te olvides de filtrar las variables.

PD3: ten en cuenta que los identificadores son importantes ya que la comparacion de enteros es más rápida y fácil que con caracteres, ten en cuenta que un caracter en mayusculas es distinto de un caracter en minúsculas y eso solo ya puede introducirte en un problema de redundancia de datos.

EDITO:

quizá esta consulta funcione mejor:

Código: php
SELECT count(l.id) FROM seccion AS s WHERE s.seccion = 'B6' LEFT JOIN libros AS l ON (l.id = s.libro_id) AND (l.libro  LIKE '%".$search."%') AND (l.type = 'infantil')