elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  contar palabras repetidas o cadena de caracteres
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: contar palabras repetidas o cadena de caracteres  (Leído 10,663 veces)
kanser

Desconectado Desconectado

Mensajes: 34


XD kanzer


Ver Perfil WWW
contar palabras repetidas o cadena de caracteres
« en: 8 Octubre 2011, 00:06 am »

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 estuve leyendo sobre count(*) de mysql pero no me queda, y quiero saber como podré utilizar menos recursos

muchas gracias de antemano agradeceré su ayuda


« Última modificación: 8 Octubre 2011, 00:08 am por kanser » En línea

prefiero amigos que comparten lo poco que saben, que amigos que saben todo y no comparten nada
Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.723


<3


Ver Perfil WWW
Re: contar palabras repetidas o cadena de caracteres
« Respuesta #1 en: 8 Octubre 2011, 01:29 am »

Exacto, con el COUNT puedes hacerlo, sólo tienes que agruparlos.

Código
  1. mysql> SELECT nombreCampo, COUNT(id)
  2.    -> FROM nombreTabla
  3.    -> GROUP BY nombreCampo;


« Última modificación: 8 Octubre 2011, 01:31 am por Shell Root » En línea

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.
kanser

Desconectado Desconectado

Mensajes: 34


XD kanzer


Ver Perfil WWW
Re: contar palabras repetidas o cadena de caracteres
« Respuesta #2 en: 8 Octubre 2011, 17:09 pm »

primeramente gracias por la ayuda me ayuda bastante

¿crees que esta consulta se pueda extender para las otras 15 tablas?

o puedo ir haciendo una por una hasta llegar a la 15 y después sumarlas con algo
En línea

prefiero amigos que comparten lo poco que saben, que amigos que saben todo y no comparten nada
madpitbull_99
Colaborador
***
Desconectado Desconectado

Mensajes: 1.911



Ver Perfil WWW
Re: contar palabras repetidas o cadena de caracteres
« Respuesta #3 en: 9 Octubre 2011, 13:07 pm »

Mira este hilo: Algoritmo Key Words.

En ese hilo hay dos funciones que dado un string (que contiene el texto) devuelve un array con
las palabras que más se repiten.


En línea



«Si quieres la paz prepárate para la guerra» Flavius Vegetius

[Taller]Instalación/Configuración y Teoría de Servicios en Red
kanser

Desconectado Desconectado

Mensajes: 34


XD kanzer


Ver Perfil WWW
Re: contar palabras repetidas o cadena de caracteres
« Respuesta #4 en: 14 Octubre 2011, 09:04 am »

hola primeramente gracias les queria decir que mis tablas son asi me habia equivocado al ponerlas

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
  1. SELECT `content_field_c2_lista`.`field_c2_lista_value` , COUNT( nid )
  2. FROM content_field_c2_lista
  3. GROUP BY `content_field_c2_lista`.`field_c2_lista_value`
  4. ORDER BY COUNT( nid ) DESC
  5. LIMIT 0 , 30
como puedo hacer para sacar las demas y sumarlas

o sacar todas

intente esto

Código
  1. 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 )
  2. 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
  3. 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 )
  4. ORDER BY COUNT( nid ) DESC  
  5. LIMIT 0 , 30

pero me da este error
Código
  1. #1052 - COLUMN 'nid' IN FIELD list IS ambiguous

gracias por su ayuda
En línea

prefiero amigos que comparten lo poco que saben, que amigos que saben todo y no comparten nada
Shell Root
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.723


<3


Ver Perfil WWW
Re: contar palabras repetidas o cadena de caracteres
« Respuesta #5 en: 14 Octubre 2011, 20:28 pm »

Supongo que es porque en varias tablas tienes el mismo nombre del campo. Así que debes de especificar la tabla al que pertenece el campo, es decir,
Código
  1. SELECT usuario.id, usuario.nombre, usuario.apellido, tarea.id -- ETC

Como tengo en dos tablas diferentes el mismo campo, y quiero mostrarlos se tiene que especificar la tabla al que pertenece el campo.
En línea

Por eso no duermo, por si tras mi ventana hay un cuervo. Cuelgo de hilos sueltos sabiendo que hay veneno en el aire.
kanser

Desconectado Desconectado

Mensajes: 34


XD kanzer


Ver Perfil WWW
Re: contar palabras repetidas o cadena de caracteres
« Respuesta #6 en: 14 Octubre 2011, 20:40 pm »

hola bueno me percato que lo de NID ambiguos es porque no sabe que NID de que tabla ya que en todas las tablas hay un NID, aunque en verdad mi objetivo es que busque en todas las tablas hice lo siguiente cambie los NID por * y le agrege HAVING

bueno es esto pero me crasheo el apache lo tube que resetear
Código
  1. 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( * )
  2. 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
  3. 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` ,  
  4. HAVING COUNT( * )
  5. ORDER BY COUNT( * ) DESC    
  6. LIMIT 0 , 30
  7.  

lo mas decente que llevo ahorita es esto
Código
  1. <?php
  2.  
  3.    $conexion = mysql_connect("localhost", "root", "radikal");
  4.    mysql_select_db("estepais", $conexion);
  5.  
  6. $sql = "SELECT COUNT( nid ) as conteo , `content_field_c2_lista`.`field_c2_lista_value`\n"
  7.    . "FROM content_field_c2_lista\n"
  8.    . "GROUP BY `content_field_c2_lista`.`field_c2_lista_value`\n"
  9.    . "HAVING COUNT( nid )\n"
  10.    . "ORDER BY COUNT( nid ) DESC\n"
  11.    . "LIMIT 0 , 30";
  12.  
  13. $result = mysql_query($sql) or die(mysql_error());
  14.  
  15. // Print out result
  16. while($row = mysql_fetch_array($result)){
  17. echo "<table border=1><tr><th>numero de veces</th><th>palabras</th></tr><tr><td>". $row['conteo'] ."</td><td> ". $row['field_c2_lista_value'] ." </td>";
  18. echo "</table>";
  19. }
  20. ?>
  21.  
  22.  
por su valiosa ayuda gracias
En línea

prefiero amigos que comparten lo poco que saben, que amigos que saben todo y no comparten nada
kanser

Desconectado Desconectado

Mensajes: 34


XD kanzer


Ver Perfil WWW
Re: contar palabras repetidas o cadena de caracteres
« Respuesta #7 en: 17 Octubre 2011, 23:32 pm »

Código
  1. <?php
  2.  
  3.    $conexion = mysql_connect("localhost", "root", "pandikal");
  4.    mysql_select_db("esterio", $conexion);
  5.  
  6. $sql = "SELECT COUNT( nid ) as conteo , `content_field_c2_lista`.`field_c2_lista_value`\n"
  7.    . "FROM content_field_c2_lista\n"
  8.    . "GROUP BY `content_field_c2_lista`.`field_c2_lista_value`\n"
  9.    . "HAVING COUNT( nid )\n"
  10.    . "ORDER BY COUNT( nid ) DESC\n"
  11.    . "LIMIT 0 , 30";
  12.  
  13. $result = mysql_query($sql) or die(mysql_error());
  14.  
  15. // Print out result
  16. while($row = mysql_fetch_array($result)){
  17. echo "<table border=1><tr><th>numero de veces</th><th>palabras</th></tr><tr><td>". $row['conteo'] ."</td><td> ". $row['field_c2_lista_value'] ." </td>";
  18. echo "</table>";
  19.  
  20. }
  21. ?>
  22.  

esto solo me sirve para la tabla content_field_c2_lista como hare para las demas tablas y despues sumarlas quiero llorar no me queda lo podre meter en otra tabla para despues de ahi sumarlas

gracias de antemano no soy muy bueno esto me esta volviendo loco creo que el problema desde un comienzo fue hacer las tablas mal el proble estan en que no lo puedo cambiar
« Última modificación: 20 Octubre 2011, 20:20 pm por kanser » En línea

prefiero amigos que comparten lo poco que saben, que amigos que saben todo y no comparten nada
kanser

Desconectado Desconectado

Mensajes: 34


XD kanzer


Ver Perfil WWW
Re: contar palabras repetidas o cadena de caracteres
« Respuesta #8 en: 20 Octubre 2011, 20:18 pm »

ubeno gracias por la ayuda eh estado estudiando un poco mas sobre la solucion y se me ocurrio hacer lo siguiente
Código
  1. (
  2. SELECT COUNT( * ) , `content_field_l1_lista`.`field_l1_lista_value`
  3. FROM content_field_l1_lista
  4. GROUP BY `content_field_l1_lista`.`field_l1_lista_value`
  5. HAVING COUNT( * )
  6. ORDER BY COUNT( * ) DESC
  7. )
  8. UNION ALL (
  9.  
  10. SELECT COUNT( * ) , `content_field_l2_lista`.`field_l2_lista_value`
  11. FROM content_field_l2_lista
  12. GROUP BY `content_field_l2_lista`.`field_l2_lista_value`
  13. HAVING COUNT( * )
  14. ORDER BY COUNT( * ) DESC
  15. )
  16. UNION ALL (
  17.  
  18. SELECT COUNT( * ) , `content_field_l3_lista`.`field_l3_lista_value`
  19. FROM content_field_l3_lista
  20. GROUP BY `content_field_l3_lista`.`field_l3_lista_value`
  21. HAVING COUNT( * )
  22. ORDER BY COUNT( * ) DESC
  23. )
y me funciona pero me lo muestra las sumas por separadas osea ya cada una sale precontada
hice esta otra consulta


Código
  1. (
  2. SELECT `content_field_l1_lista`.`field_l1_lista_value`
  3. FROM content_field_l1_lista
  4.  
  5. )
  6. UNION ALL (
  7. SELECT `content_field_l2_lista`.`field_l2_lista_value`
  8. FROM content_field_l2_lista
  9. )
  10. UNION ALL (
  11.  
  12. SELECT `content_field_l3_lista`.`field_l3_lista_value`
  13. FROM content_field_l3_lista
  14. )

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

Código
  1. (
  2. SELECT `content_field_l1_lista`.`field_l1_lista_value`
  3. FROM content_field_l1_lista
  4. )
  5. UNION ALL (
  6.  
  7. SELECT `content_field_l2_lista`.`field_l2_lista_value`
  8. FROM content_field_l2_lista
  9. )
  10. UNION ALL (
  11.  
  12. SELECT `content_field_l3_lista`.`field_l3_lista_value`
  13. FROM content_field_l3_lista
  14. )
  15. COUNT (field_l1_lista_value)
  16.  

pero me da error alguna idea

gracias de antemano
En línea

prefiero amigos que comparten lo poco que saben, que amigos que saben todo y no comparten nada
kanser

Desconectado Desconectado

Mensajes: 34


XD kanzer


Ver Perfil WWW
Re: contar palabras repetidas o cadena de caracteres
« Respuesta #9 en: 21 Octubre 2011, 01:22 am »

solo me falta un detalle

con esta consulta si queda pero no se como aplicarla en php ya nadamas para que me muestro todo

Código
  1. CREATE TEMPORARY TABLE final
  2. SELECT `content_field_l1_lista`.`field_l1_lista_value`
  3. FROM content_field_l1_lista
  4. UNION ALL
  5. SELECT `content_field_l2_lista`.`field_l2_lista_value`
  6. FROM content_field_l2_lista
  7. UNION ALL
  8. SELECT `content_field_l3_lista`.`field_l3_lista_value`
  9. FROM content_field_l3_lista;
  10.  
  11. SELECT COUNT( * ) , `final`.`field_l1_lista_value`
  12. FROM final
  13. GROUP BY `final`.`field_l1_lista_value`
  14. HAVING COUNT( * )
  15. ORDER BY COUNT( * ) DESC
  16. LIMIT 0 , 30;
  17.  
En línea

prefiero amigos que comparten lo poco que saben, que amigos que saben todo y no comparten nada
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines