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

consulta

Estas en el tema de consulta en el foro de Mysql en Foros del Web. hola amigos del foro tengo un problema, haber si me lo pueden solucionar Quiero hacer una consulta a la BD para que me cuente las ...
  #1 (permalink)  
Antiguo 18/11/2011, 05:04
 
Fecha de Ingreso: septiembre-2011
Ubicación: España
Mensajes: 118
Antigüedad: 12 años, 7 meses
Puntos: 0
consulta

hola amigos del foro tengo un problema, haber si me lo pueden solucionar

Quiero hacer una consulta a la BD para que me cuente las filas que tengo del
usuario 'juan' y cuyo titulo NO sea 'hola'

Y ademas que me cuente las filas que tengo del usuario 'juan' y cuyo titulo sea 'hola'

nose como hacerlo, yo tengo eso pero no va

select count(usuario), count(titulo)
from fotos
where usuario = 'juan' and titulo != 'hola';

alguien me puede ayudar, gracias de antemano
  #2 (permalink)  
Antiguo 18/11/2011, 08:08
Avatar de andrexsos17  
Fecha de Ingreso: enero-2011
Ubicación: Manizales
Mensajes: 169
Antigüedad: 13 años, 3 meses
Puntos: 15
Respuesta: consulta

Hola, por favor pega la estructura de tu tabla para poder ayudarte.

Saludos!!
__________________
Todo problema es una forma mental que la mente sostiene. Los problemas dejan de existir cuando los olvidamos. Todo problema ha sido creado por la mente y existe mientras la mente lo sostenga.
  #3 (permalink)  
Antiguo 18/11/2011, 09:00
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: consulta

Hola diegohugogallego

Una manera sería con un sum condicional:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE fotos (usuario VARCHAR(10), titulo VARCHAR(10));
  2. Query OK, 0 rows affected (0.09 sec)
  3.  
  4. mysql> INSERT INTO fotos VALUES ('juan', 'uno'), ('juan', 'hola'),
  5.     -> ('juan', 'dos'), ('mateo', 'hola'), ('marco', 'juan');
  6. Query OK, 5 rows affected (0.03 sec)
  7. Records: 5  Duplicates: 0  Warnings: 0
  8.  
  9. mysql> SELECT * from fotos;
  10. +---------+--------+
  11. | usuario | titulo |
  12. +---------+--------+
  13. | juan    | uno    |
  14. | juan    | hola   |
  15. | juan    | dos    |
  16. | mateo   | hola   |
  17. | marco   | juan   |
  18. +---------+--------+
  19. 5 rows in set (0.00 sec)
  20.  
  21. mysql> SELECT usuario, SUM(IF(titulo = 'hola', 1, 0)) total_hola,
  22.     -> SUM(IF(titulo != 'hola', 1, 0)) total_no_hola
  23.     -> FROM fotos
  24.     -> WHERE usuario = 'juan';
  25. +---------+------------+---------------+
  26. | usuario | total_hola | total_no_hola |
  27. +---------+------------+---------------+
  28. | juan    |          1 |             2 |
  29. +---------+------------+---------------+
  30. 1 row in set (0.00 sec)

Dale un vistazo a ver si es lo que necesitas.

Saludos
Leo

Última edición por leonardo_josue; 18/11/2011 a las 09:09
  #4 (permalink)  
Antiguo 18/11/2011, 12:40
 
Fecha de Ingreso: septiembre-2011
Ubicación: España
Mensajes: 118
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: consulta

muy bueno leonardo_josue perdon por la demora pero hoy era mi tarde libre, pero en cuanto vi tu respuesta me puse manos a la obra probando el codigo y funicona de maravilla ,aun que no entiendo mucho esta parte: SUM(IF(titulo != 'hola', 1, 0)) total_no_hola

con eso dices que si el titulo es diferente de hola que vaya contando no?, pero para que es el uno y el cero
  #5 (permalink)  
Antiguo 18/11/2011, 14:34
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 meses
Puntos: 447
Respuesta: consulta

Hola de nuevo diegohugogallego:

Código:
SUM(IF(titulo != 'hola', 1, 0)) total_no_hola
Esto es simplemente un contador... internamente lo que hace es asignarle un 1 a aquellos registros que cumplen una condición y un cero a los que no, es decir, observa cómo se comporta la consulta sin el sum:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM fotos;
  2. +---------+--------+
  3. | usuario | titulo |
  4. +---------+--------+
  5. | juan    | uno    |
  6. | juan    | hola   |
  7. | juan    | dos    |
  8. | mateo   | hola   |
  9. | marco   | juan   |
  10. +---------+--------+
  11. 5 rows in set (0.00 sec)
  12.  
  13. mysql> SELECT usuario, titulo,
  14.     -> IF(titulo = 'hola', 1, 0) total_hola,
  15.     -> IF(titulo != 'hola', 1, 0) total_no_hola
  16.     -> FROM fotos
  17.     -> WHERE usuario = 'juan';
  18. +---------+--------+------------+---------------+
  19. | usuario | titulo | total_hola | total_no_hola |
  20. +---------+--------+------------+---------------+
  21. | juan    | uno    |          0 |             1 |
  22. | juan    | hola   |          1 |             0 |
  23. | juan    | dos    |          0 |             1 |
  24. +---------+--------+------------+---------------+
  25. 3 rows in set (0.00 sec)

de tal suerte que si sumas (SUM) el número de 1's de la columna total_hola te da el resultado esperado, lo mismo para la columna de no_hola.

Espero que con esto haya quedado un poco más claro.

Saludos
Leo.
  #6 (permalink)  
Antiguo 18/11/2011, 14:53
 
Fecha de Ingreso: septiembre-2011
Ubicación: España
Mensajes: 118
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: consulta

gracias leonardo_josue no sabia que existia eso de poner 1 a los registros que cumplen la condicion, mejor dicho no sabia ni que se le podia poner un if a una consulta


ya que estamos y veo que controlas del tema, pregunto: se podria hacer con este codigo que me pasaste

mysql> SELECT usuario, SUM(IF(titulo = 'hola', 1, 0)) total_hola,
-> SUM(IF(titulo != 'hola', 1, 0)) total_no_hola
-> FROM fotos
-> WHERE usuario = 'juan';


que 'total_hola' y 'total_no_hola' arrogen un valor
osea que si el 'titulo' es igual a 'hola' me arroge el valor 1 y sino lo es que me arroge el valor 0


y llendo mas legos aun: imaginate que me hace falta saber si ahy algun titulo con 'hola', que con solo encontar un titulo que ponga 'hola' ya se detenga la consulta


leo gracias por todo y perdon si soy muy pesado

Etiquetas: select
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 12:05.