Comunidad de diseño web y desarrollo en internet online

contar cuantas veces se repite una cadena de caracteres en varias tabl

Citar            
MensajeEscrito el 07 Oct 2011 10:19 pm
Hola buenas a todos primeramente agradecer por la ayuda prestada

tengo un sitio con un formulario de gustos en general desde música hasta cine etc..
necesito hacer una lista de las palabras mas ingresadas debo hacerlo en php

para rellenar la BD los usuarios llenan 15 formas cada forma es para cada tabla ósea que hay 15 tablas para esto field_c1_lista_value, field_c2_lista_value, field_c3_lista_value, field_c4_lista_value,... hasta llegar a field_c15_lista_value

quiero que me aparezca así mas o menos:
the ramones (5)
maria bonita (4)
Los Fabulosos Cadilacs (3)
caimanes (3)


la base del sitio esta algo asi
-----------------------------------------
field_c1_lista_value |
-----------------------------------------
| vid | nid | field_l1_lista_value |
| 1 | 1 | Los Fabulosos Cadilacs |
| 2 | 2 | caifanes |
| 3 | 3 | the ramones |
| 4 | 4 | null |
| 5 | 5 | maria bonita |
| 6 | 6 | null |
| 7 | 7 | null |

----------------------------------------
field_c2_lista_value |
----------------------------------------
| vid | nid | field_l2_lista_value |
| 1 | 1 | Los Fabulosos Cadil |
| 2 | 2 | caifanes |
| 3 | 3 | the ramones |
| 4 | 4 | Los Fabulosos Cadilacs |
| 5 | 5 | maria bonita |
| 6 | 6 | null |
| 7 | 7 | maria bonita |
-----------------------------------
field_c3_lista_value |
-----------------------------------
| vid | nid | field_l3_lista_value |
| 1 | 1 | the ramones |
| 2 | 2 | caifanes |
| 3 | 3 | the ramones |
| 4 | 4 | null |
| 5 | 5 | maria bonita |
| 6 | 6 | the ramones |
| 7 | 7 | nulo |
-----------------------------------------
no se como lograrlo estube leyendo sobre count(*) de mysql pero no me queda, y quiero saber como podré utilizar menos recursos

muchas gracias de antemano agradeceré su ayuda

Por kanzer

11 de clabLevel



 

safari
Citar            
MensajeEscrito el 08 Oct 2011 09:13 am
la consulta sql es (suponiendo que la tabla se llama grupos)


SELECT nombre_Grupo , COUNT(*)
FROM grupos
GROUP BY nombre_Grupo;


En tu esquema me ha parecido entender que las 15 tablas contienen los mismos tipos de datos que usas, una tabla para cada usuario??? si es asi deberias saber de ante mano que no solo no es necesario sino que en general no es la forma en la que se hace, en su lugar se usaria una sola tabla a la que se agregaria una columna que identifique al usuario al que hacen referencia los datos.

Por bray

65 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Oct 2011 02:47 pm
primeramente muchas gracias por la ayuda me sirve de mucho

por ejemplo mi consulta quedaria asi?

SELECT field_l1_lista_value , COUNT(*)
FROM field_c1_lista_value
GROUP BY field_l1_lista_value;

otra cosa hice este formulario con la ayuda de un cms llamado drupal, y asi que hay un fomulario grande con 15 formularios o paneles chiquitos donde se le pregunta categoría ejem. cine, revistas, libros, etc..por lo que cada panelsito o subforma manda el contenido a una tabla distinta
otra cosa que no se si ayude en "field_c1_lista_value" el vid 3 es el mismo usuario que en "field_c2_lista_value" vid 3 y asi se va "field_c3_lista_value" vid 3 etc.. hasta llegar a la "field_c15_lista_value" vid 3, donde dice null el usuario no lleno nada

se que es complicado pues eh estado leyendo y leyendo a pesar de que no se de mysql mucho ni de php este gran comunidad me a ayudado bastante, y si creo que estubo mal que esten en diferentes tablas pero ya tengo 300 usuarios que llenaron sus listas y no puedo cambiarlo creo

entonces no se si este bien como voy o si hago esto siguiente:
SELECT field_l1_lista_value , COUNT(*)
FROM field_c1_lista_value
GROUP BY field_l1_lista_value;

y luego hago esto para cada tabla hasta llegar a las 15 y luego sumarlo?

de antemano muchisimas gracias

Por kanzer

11 de clabLevel



 

chrome
Citar            
MensajeEscrito el 08 Oct 2011 04:52 pm
El problema para ayudarte es que no entiendo bien lo que almacenan las tablas porque me da la sensación de que todas almacenan lo mismo pero que cada tabla es para algún grupo de usuarios, o algo así, de ser asi , cada grupo de usuarios debería hacer la consulta con la tabla que le corresponde.

es que con tantas tablas la consulta es compleja. pudes consultar tabla por tabla con php y sumar la salida con php

o puedes hacer toda la consulta con mysql pero esa consulta sera bastante grande.

Por bray

65 de clabLevel



 

firefox
Citar            
MensajeEscrito el 08 Oct 2011 05:36 pm

bray escribió:


es que con tantas tablas la consulta es compleja. pudes consultar tabla por tabla con php y sumar la salida con php

por ejemplo voy a hacer esto
SELECT field_l1_lista_value , COUNT(*)
FROM field_c1_lista_value
GROUP BY field_l1_lista_value;

para cada tabla y luego lo voy a sumar con php a ver que me resulta

bray escribió:


o puedes hacer toda la consulta con mysql pero esa consulta sera bastante grande.


usaría muchos recursos verdad creo que sera mejor la otra opción

gracias

Por kanzer

11 de clabLevel



 

chrome
Citar            
MensajeEscrito el 14 Oct 2011 06:55 am
hola primeramente les queria decir que mis tablas son asi me habia equivocado al ponerlas

kanzer escribió:



la base del sitio esta algo asi
-----------------------------------------
content_field_c1_lista |
-----------------------------------------
| vid | nid | content_field_c1_lista_value |
| 1 | 1 | Los Fabulosos Cadilacs |
| 2 | 2 | caifanes |
| 3 | 3 | the ramones |
| 4 | 4 | null |
| 5 | 5 | maria bonita |
| 6 | 6 | null |
| 7 | 7 | null |

----------------------------------------
content_field_c2_lista |
----------------------------------------
| vid | nid | content_field_c2_lista_value |
| 1 | 1 | Los Fabulosos Cadil |
| 2 | 2 | caifanes |
| 3 | 3 | the ramones |
| 4 | 4 | Los Fabulosos Cadilacs |
| 5 | 5 | maria bonita |
| 6 | 6 | null |
| 7 | 7 | maria bonita |
-----------------------------------
content_field_c3_lista |
-----------------------------------
| vid | nid | content_field_c3_lista_value |
| 1 | 1 | the ramones |
| 2 | 2 | caifanes |
| 3 | 3 | the ramones |
| 4 | 4 | null |
| 5 | 5 | maria bonita |
| 6 | 6 | the ramones |
| 7 | 7 | nulo |
-----------------------------------------

con este codigo me las cuenta como queria pero solo para la tabla

content_field_c2_lista

Código MySQL :

SELECT `content_field_c2_lista`.`field_c2_lista_value` , COUNT( nid )
FROM content_field_c2_lista
GROUP BY `content_field_c2_lista`.`field_c2_lista_value`
ORDER BY COUNT( nid ) DESC
LIMIT 0 , 30


como puedo hacer para sacar las demas y sumarlas

o sacar todas

intente esto

Código MySQL :

SELECT `content_field_c1_lista`.`field_c1_lista_value`, `content_field_c2_lista`.`field_c2_lista_value`, `content_field_c3_lista`.`field_c3_lista_value`, `content_field_c4_lista`.`field_c4_lista_value`, `content_field_c5_lista`.`field_c5_lista_value`, `content_field_c6_lista`.`field_c6_lista_value`, `content_field_c7_lista`.`field_c7_lista_value`, `content_field_c8_lista`.`field_c8_lista_value`, `content_field_c9_lista`.`field_c9_lista_value`, `content_field_c10_lista`.`field_c10_lista_value`, `content_field_c11_lista`.`field_c11_lista_value`, `content_field_c12`.`field_c12_value`, `content_field_c13_lista`.`field_c13_lista_value`, `content_field_c14_lista`.`field_c14_lista_value`, `content_field_c15_lista`.`field_c15_lista_value` , COUNT( nid )
FROM content_field_c1_lista, content_field_c2_lista, content_field_c3_lista, content_field_c4_lista, content_field_c5_lista, content_field_c6_lista, content_field_c7_lista, content_field_c8_lista, content_field_c9_lista, content_field_c10_lista, content_field_c11_lista, content_field_c12, content_field_c13_lista, content_field_c14_lista, content_field_c15_lista
GROUP BY `content_field_c1_lista`.`field_c1_lista_value`, `content_field_c2_lista`.`field_c2_lista_value`, `content_field_c3_lista`.`field_c3_lista_value`, `content_field_c4_lista`.`field_c4_lista_value`, `content_field_c5_lista`.`field_c5_lista_value`, `content_field_c6_lista`.`field_c6_lista_value`, `content_field_c7_lista`.`field_c7_lista_value`, `content_field_c8_lista`.`field_c8_lista_value`, `content_field_c9_lista`.`field_c9_lista_value`, `content_field_c10_lista`.`field_c10_lista_value`, `content_field_c11_lista`.`field_c11_lista_value`, `content_field_c12`.`field_c12_value`, `content_field_c13_lista`.`field_c13_lista_value`, `content_field_c14_lista`.`field_c14_lista_value`, `content_field_c15_lista`.`field_c15_lista_value` , COUNT( nid )
ORDER BY COUNT( nid ) DESC   
LIMIT 0 , 30 


pero me da este error

Código MySQL :

#1052 - Column 'nid' in field list is ambiguous


gracias por su ayuda

Por kanzer

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Oct 2011 12:22 pm
Lo que el mensaje quiere decir es que MySQL no sabe al campo "nid" de qué tabla te estás refiriendo en la consulta. Si miras bien todas tus tablas tienen un campo llamado "nid" ¿a cuál de ellos te refieres en la consulta?.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 14 Oct 2011 05:59 pm
si el problema es que todas las tablas tienen un campo nid, ¿pero como haré para que haga la consulta en todas las tablas ?

¿que metodo debo de utilizar?
probe con esta consulta desde phpmyadmin y me congelo el navegador hasta tube que reiniciar apache

Código MySQL :

SELECT `content_field_c1_lista`.`field_c1_lista_value`, `content_field_c2_lista`.`field_c2_lista_value`, `content_field_c3_lista`.`field_c3_lista_value`, `content_field_c4_lista`.`field_c4_lista_value`, `content_field_c5_lista`.`field_c5_lista_value`, `content_field_c6_lista`.`field_c6_lista_value`, `content_field_c7_lista`.`field_c7_lista_value`, `content_field_c8_lista`.`field_c8_lista_value`, `content_field_c9_lista`.`field_c9_lista_value`, `content_field_c10_lista`.`field_c10_lista_value`, `content_field_c11_lista`.`field_c11_lista_value`, `content_field_c12`.`field_c12_value`, `content_field_c13_lista`.`field_c13_lista_value`, `content_field_c14_lista`.`field_c14_lista_value`, `content_field_c15_lista`.`field_c15_lista_value` , COUNT( * )
FROM content_field_c1_lista, content_field_c2_lista, content_field_c3_lista, content_field_c4_lista, content_field_c5_lista, content_field_c6_lista, content_field_c7_lista, content_field_c8_lista, content_field_c9_lista, content_field_c10_lista, content_field_c11_lista, content_field_c12, content_field_c13_lista, content_field_c14_lista, content_field_c15_lista
GROUP BY `content_field_c1_lista`.`field_c1_lista_value`, `content_field_c2_lista`.`field_c2_lista_value`, `content_field_c3_lista`.`field_c3_lista_value`, `content_field_c4_lista`.`field_c4_lista_value`, `content_field_c5_lista`.`field_c5_lista_value`, `content_field_c6_lista`.`field_c6_lista_value`, `content_field_c7_lista`.`field_c7_lista_value`, `content_field_c8_lista`.`field_c8_lista_value`, `content_field_c9_lista`.`field_c9_lista_value`, `content_field_c10_lista`.`field_c10_lista_value`, `content_field_c11_lista`.`field_c11_lista_value`, `content_field_c12`.`field_c12_value`, `content_field_c13_lista`.`field_c13_lista_value`, `content_field_c14_lista`.`field_c14_lista_value`, `content_field_c15_lista`.`field_c15_lista_value` , 
HAVING COUNT( * )
ORDER BY COUNT( * ) DESC   
LIMIT 0 , 30

en vez nid le puse *

de antemano gracias por la ayuda

Por kanzer

11 de clabLevel



 

safari
Citar            
MensajeEscrito el 20 Oct 2011 06:30 pm
hola buenas gracias a todos creo que estoy por resolver mi problema

eh estado estudiando un poco mas sobre la solucion y se me ocurrio hacer lo siguiente

Código MySQL :

(
SELECT COUNT( * ) , `content_field_l1_lista`.`field_l1_lista_value`
FROM content_field_l1_lista
GROUP BY `content_field_l1_lista`.`field_l1_lista_value`
HAVING COUNT( * )
ORDER BY COUNT( * ) DESC
)
UNION ALL (
 
SELECT COUNT( * ) , `content_field_l2_lista`.`field_l2_lista_value`
FROM content_field_l2_lista
GROUP BY `content_field_l2_lista`.`field_l2_lista_value`
HAVING COUNT( * )
ORDER BY COUNT( * ) DESC
)
UNION ALL (
 
SELECT COUNT( * ) , `content_field_l3_lista`.`field_l3_lista_value`
FROM content_field_l3_lista
GROUP BY `content_field_l3_lista`.`field_l3_lista_value`
HAVING COUNT( * )
ORDER BY COUNT( * ) DESC
)


y me funciona pero me lo muestra las sumas por separadas osea ya cada una sale precontada
hice esta otra consulta


Código

Código MySQL :

(
SELECT `content_field_l1_lista`.`field_l1_lista_value`
FROM content_field_l1_lista
 
)
UNION ALL (
SELECT `content_field_l2_lista`.`field_l2_lista_value`
FROM content_field_l2_lista
)
UNION ALL (
 
SELECT `content_field_l3_lista`.`field_l3_lista_value`
FROM content_field_l3_lista
)



el resultado es la lista de todos los valores ahora como puedo agruparlos y contarlos despues de esto


Código MySQL :

(
SELECT `content_field_l1_lista`.`field_l1_lista_value`
FROM content_field_l1_lista
)
UNION ALL (
 
SELECT `content_field_l2_lista`.`field_l2_lista_value`
FROM content_field_l2_lista
)
UNION ALL (
 
SELECT `content_field_l3_lista`.`field_l3_lista_value`
FROM content_field_l3_lista
)
COUNT (field_l1_lista_value)




pero me da error alguna idea

gracias de antemano

Por kanzer

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Oct 2011 07:21 pm
Sin ánimos de molestar.

Deberías reconsiderar el diseño de la base de datos.

A simple vista se nota que no tienen ningún sentido tener 15 tablas que de todas formas contendrán los mismos datos, puedes usar solo una tabla que tendrá otro campo que identifique a qué formulario se refiere.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 20 Oct 2011 07:29 pm
me gustaria hacer eso pero el anterior pero el anterior programador hiso esto asi, ahorita hay cerca de 400 registros que me serian dificil migrar todo

solo me han encargado hacer este contador ufff

Por kanzer

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 20 Oct 2011 11:27 pm
ya que si me queda y doy por resuelto este tema ufff me ha hecho llorar casi casi

pero gracias a la ayuda de todos voy concluyendolo

con esta consulta me sale bien como lo quiero solo que no se como ponerlo en php para que me lo muestre los rows en una tabla y otro detallito esque los null me los pone hasta arriba aunque eso ya no me importa tanto

gracias por su ayuda y opiniones

Código MySQL :

CREATE TEMPORARY TABLE final
SELECT `content_field_l1_lista`.`field_l1_lista_value`
FROM content_field_l1_lista
UNION ALL
SELECT `content_field_l2_lista`.`field_l2_lista_value`
FROM content_field_l2_lista
UNION ALL
SELECT `content_field_l3_lista`.`field_l3_lista_value`
FROM content_field_l3_lista;

SELECT COUNT( * ) , `final`.`field_l1_lista_value`
FROM final
GROUP BY `final`.`field_l1_lista_value`
HAVING COUNT( * )
ORDER BY COUNT( * ) DESC
LIMIT 0 , 30;

Por kanzer

11 de clabLevel



 

firefox
Citar            
MensajeEscrito el 21 Oct 2011 12:09 pm

kanzer escribió:

me gustaria hacer eso pero el anterior pero el anterior programador hiso esto asi, ahorita hay cerca de 400 registros que me serian dificil migrar todo

No, no sería difícil. Da igual que sean 400 o cuatro millones. En quince minutos puedes hacerlo.

Por DriverOp

Claber

2510 de clabLevel



 

opera

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.