Vamos a revisar el código que has proporcionado. Aquí hay algunos aspectos a considerar y posibles errores que podrían surgir:
### 1. Formato de Conversión de Fechas
Cuando utilizas
STR_TO_DATE, asegúrate de que el formato que especificas coincida exactamente con cómo están almacenadas las fechas en la columna
hora. Si los datos en
hora no están en el formato
d-m-Y H:i:s, esto provocará que no devuelvan resultados. Verifica el formato de las fechas.
### 2. Consulta SQL
Cuando realizas la consulta SQL, si no se encuentra nada, esto puede ser porque:
- No hay ningún registro que cumpla con el rango de fechas especificado.
- Las fechas almacenadas en
hora no están en el formato correcto para ser convertidas.
### 3. Variables de Comprobación
Comprueba si la conexión a la base de datos (
$conexion) es válida antes de ejecutar las consultas. También considera manejar errores al ejecutar cada consulta, para poder identificar problemas.
Por ejemplo:
PHP:
if (!$chopos) {
echo "Error en la consulta de hashtags: " . mysqli_error($conexion);
exit;
}
### 4. Comprobación de los Resultados de la Consulta
Después de ejecutar la consulta de
mysqli_query, sería útil comprobar si se han devuelto filas:
PHP:
if (mysqli_num_rows($chopos) == 0) {
echo "No se encontraron resultados.<br>";
}
### 5. Verificación de Datos al Usar
strpos
Cuando uses
preg_match_all, asegúrate de que tus cadenas realmente contienen hashtags. Puedes imprimir el contenido verificado:
PHP:
echo "Contenido: " . $string . "<br>";
### 6. Uso de
UNION ALL
El uso de
UNION ALL en la consulta es correcto si deseas que todos los resultados se incluyan sin eliminar duplicados. Sin embargo, asegúrate de que las columnas seleccionadas en ambas partes tengan el mismo tipo.
### 7. Limitar el Número de Hashtags
Dado que estás limitando los hashtags a los primeros 10 mostrados, asegúrate de que hay suficientes datos para que esto tenga sentido.
### Código de Ejemplo
Aquí hay un fragmento simplificado incorporando algunas de las verificaciones anteriores:
PHP:
$chopos = mysqli_query($conexion, "SELECT id, descripts AS content
FROM posters
WHERE descripts REGEXP '#[[:alnum:]]+' AND STR_TO_DATE(hora, '%d-%m-%Y %H:%i:%s')
BETWEEN STR_TO_DATE('$startDateFormatted', '%d-%m-%Y %H:%i:%s')
AND STR_TO_DATE('$endDateFormatted', '%d-%m-%Y %H:%i:%s')
UNION ALL
SELECT id, mensaje AS content
FROM resposters
WHERE mensaje REGEXP '#[[:alnum:]]+' AND STR_TO_DATE(hora, '%d-%m-%Y %H:%i:%s')
BETWEEN STR_TO_DATE('$startDateFormatted', '%d-%m-%Y %H:%i:%s')
AND STR_TO_DATE('$endDateFormatted', '%d-%m-%Y %H:%i:%s')
ORDER BY id DESC"
);
if (!$chopos) {
echo "Error en la consulta: " . mysqli_error($conexion);
exit;
}
if (mysqli_num_rows($chopos) == 0) {
echo "No se encontraron resultados.<br>";
} else {
while ($loupas = mysqli_fetch_assoc($chopos)) {
// Proceso de hashtaging
}
}
### Resumen
- Verifica el formato de la columna
hora.
- Asegúrate de que las opciones de conexión a la base de datos sean válidas.
- Comprueba si hay registros que cumplen con los criterios.
- Maneja los errores de consulta de manera adecuada.
Realiza estas pruebas y si encuentras errores o necesitas más detalles sobre un aspecto específico, házmelo saber. ¡Estoy aquí para ayudarte!
$dateStart = new DateTime();
$dateStart->modify('monday this week'); // Primer día de la semana
$dateEnd = new DateTime();
$dateEnd->modify('sunday this week'); // Último día de la semana
// Formatear fechas a d-m-Y H:i:s
$startDateFormatted = $dateStart->format('d-m-Y 00:00:00');
$endDateFormatted = $dateEnd->format('d-m-Y 23:59:59');
$chopos = mysqli_query($conexion,"SELECT id, descripts AS content
FROM posters
WHERE descripts REGEXP '#[[:alnum:]]+' AND STR_TO_DATE(hora, '%d-%m-%Y %H:%i:%s') BETWEEN STR_TO_DATE('$startDateFormatted', '%d-%m-%Y %H:%i:%s') AND STR_TO_DATE('$endDateFormatted', '%d-%m-%Y %H:%i:%s')
UNION ALL
SELECT id, mensaje AS content
FROM resposters
WHERE mensaje REGEXP '#[[:alnum:]]+' AND STR_TO_DATE(hora, '%d-%m-%Y %H:%i:%s') BETWEEN STR_TO_DATE('$startDateFormatted', '%d-%m-%Y %H:%i:%s') AND STR_TO_DATE('$endDateFormatted', '%d-%m-%Y %H:%i:%s')
UNION ALL
SELECT id, mensaje AS content
FROM resposters2
WHERE mensaje REGEXP '#[[:alnum:]]+' AND STR_TO_DATE(hora, '%d-%m-%Y %H:%i:%s') BETWEEN STR_TO_DATE('$startDateFormatted', '%d-%m-%Y %H:%i:%s') AND STR_TO_DATE('$endDateFormatted', '%d-%m-%Y %H:%i:%s')
ORDER BY id DESC");
$hashtag_count = 0;
$unique_hashtags = array();
$hashtag_occurrences = array(); // Array para contar las ocurrencias
$likes_occurrences = array(); // Array para contar los likes
$comments_occurrences = array(); // Array para contar los comentarios
$shares_occurrences = array(); // Array para contar las veces compartido
$total_occurrences = array(); // Array para contar la suma total de hashtags, likes, comentarios y compartidos
while ($loupas = mysqli_fetch_assoc($chopos)) {
$string = $loupas['content'];
preg_match_all("/(#\w+)/", $string, $matches);
$hashtags = array_unique($matches[0]);
foreach ($hashtags as $hashtag) {
// Contamos hashtags únicos
if (!in_array($hashtag, $unique_hashtags)) {
$unique_hashtags[] = $hashtag; // Agregar a hashtags únicos
}
// Sumar ocurrencias
if (isset($hashtag_occurrences[$hashtag])) {
$hashtag_occurrences[$hashtag]++;
} else {
$hashtag_occurrences[$hashtag] = 1; // Inicializar el conteo
}
// Contar likes asociados a cada hashtag
$chols = mysqli_query($conexion, "SELECT * FROM likeposter WHERE idlike='" . $loupas['id'] . "' ORDER BY id DESC");
$lomy = mysqli_num_rows($chols); // Número de likes
// Contar comentarios
$motuep = mysqli_query($conexion,"SELECT * FROM resposters WHERE idresp='" . $loupas['id'] . "'");
$motuepy = mysqli_query($conexion,"SELECT * FROM resposters2 WHERE idpost='" . $loupas['id'] . "'");
$comments_count = mysqli_num_rows($motuep) + mysqli_num_rows($motuepy); // Total comentarios
// Contar compartido
$clube = mysqli_query($conexion,"SELECT * FROM posters WHERE idshare='" . $loupas['id'] . "' ORDER BY id ASC");
$shares_count = mysqli_num_rows($clube); // Total compartidos
// Sumar likes a las ocurrencias correspondientes
if (isset($likes_occurrences[$hashtag])) {
$likes_occurrences[$hashtag] += $lomy; // Aumentar los likes
} else {
$likes_occurrences[$hashtag] = $lomy; // Inicializar los likes
}
// Sumar comentarios a las ocurrencias correspondientes
if (isset($comments_occurrences[$hashtag])) {
$comments_occurrences[$hashtag] += $comments_count; // Aumentar los comentarios
} else {
$comments_occurrences[$hashtag] = $comments_count; // Inicializar los comentarios
}
// Sumar compartidos a las ocurrencias correspondientes
if (isset($shares_occurrences[$hashtag])) {
$shares_occurrences[$hashtag] += $shares_count; // Aumentar los compartidos
} else {
$shares_occurrences[$hashtag] = $shares_count; // Inicializar los compartidos
}
// Sumar al total
$total_occurrences[$hashtag] = ($hashtag_occurrences[$hashtag] + $likes_occurrences[$hashtag] + $comments_occurrences[$hashtag] + $shares_occurrences[$hashtag]);
$hashtag_count++; // Contar el número total de hashtags encontrados
}
}
// Ordenar hashtags por total de ocurrencias (de mayor a menor)
arsort($total_occurrences); // Ordenar el array en orden descendente
// Mostrar los hashtags y sus conteos de likes, comentarios y compartidos
foreach ($total_occurrences as $hashtag => $totalCount) {
$likesCount = isset($likes_occurrences[$hashtag]) ? $likes_occurrences[$hashtag] : 0; // Obtener el conteo de likes
$hashtagCount = isset($hashtag_occurrences[$hashtag]) ? $hashtag_occurrences[$hashtag] : 0; // Obtener el conteo de hashtags
$commentsCount = isset($comments_occurrences[$hashtag]) ? $comments_occurrences[$hashtag] : 0; // Obtener el conteo de comentarios
$sharesCount = isset($shares_occurrences[$hashtag]) ? $shares_occurrences[$hashtag] : 0; // Obtener el conteo de compartidos
echo '<a class="labra">' . $hashtag . ' : ' . $hashtagCount . ' (Likes: ' . $likesCount . ', Comentarios: ' . $commentsCount . ', Compartidos: ' . $sharesCount . ', Total: ' . $totalCount . ')</a><br>';
if (--$hashtag_count <= 0) {
break; // Salir si se han mostrado 10 o más
}
}
porque hay mas de 10 resultados #??