Recordad que para pedir soporte alguno, debéis facilitar los datos de soporte oportunos por favor, mirad aquí y leer las Normas generales del foro, esto nos servirá de ayuda para dar el mejor soporte..

Gracias.

La Administración de phpBB España.

consulta mysqlTema Solucionado

Foros donde podréis dejar vuestras dudas sobre phpBB 3.0.x
rafaxplayer
Observador/a
Mensajes: 48
Registrado: 23 Nov 2010, 15:46

consulta mysql

#1

Mensaje por rafaxplayer »

Hola amigos ,primero decir que esta pregunta es sobre mysql y no se si este es el sitio adecuado pero ni he visto ninguno mas acorde, si no es así lo siento.

Me gustaría saber según el sistema de base de datos del foro ... como seria la consulta para saber los últimos post publicados desde ultima visita de un usuario que todavía el no haya leído.

Estoy utilizando esta pero solo me da los post nuevos desde su ultima visita:

Código: Seleccionar todo

mysql_select_db($dbname,mysql_connect($dbhost,$dbuser,$dbpasswd));
$userdata = mysql_fetch_array(mysql_query("SELECT user_lastvisit FROM phpbb_users WHERE username_clean='".mysql_real_escape_string(strtolower($_GET['id']))."' LIMIT 1"));

$FI=0;
if ($userdata!=false) {
	$query = mysql_query("select * from phpbb_posts where post_time > '".$userdata[0]."' ORDER BY post_time DESC LIMIT 50");
	while ($data=mysql_fetch_array($query)) {	
		
		$FI++;
	}
	
} 
echo $FI;
Datos:
URL: http://amsspecialist.com
Versión phpBB: phpBB3 (3.0.11-PL1)
MODs Instalados:
- SyntaxHighlighter 1.0.12
- Very Simple Guest Hide BBCode MOD 1.0.1
Plantilla(s) usada(s): iridium
Servidor: Gratuito
Actualización desde otra versión: No
Conversión desde otro sistema de foros: No
URL: http://amsspecialist.com
Versión phpBB: phpBB3 (3.0.11-PL1)
MODs Instalados:
- SyntaxHighlighter 1.0.12
- Very Simple Guest Hide BBCode MOD 1.0.1
Plantilla(s) usada(s): Comboot Freee
Servidor: Gratuito
Actualización desde otra versión: No
Conversión desde otro sistema de foros: No

Avatar de Usuario
Rainwod
Ex Staff
Mensajes: 1151
Registrado: 16 Mar 2012, 14:43
Género:
Edad: 31

Re: consulta mysql

#2

Mensaje por Rainwod »

Por favor mover tema a foro oportuno.


Avatar de Usuario
ThE KuKa
Administrador
Mensajes: 10432
Registrado: 04 Ene 2004, 19:27
Género:
Edad: 50

Re: consulta mysql

#3

Mensaje por ThE KuKa »

 ! 
Mensaje del Equipo por: ThE KuKa
Tema Movido.
Creo que puedes descargar este MOD y comparar código para ver que código usa el autor para que aparezcan los últimos mensajes. :wink:
http://www.phpbb-es.com/foro/descarga-m ... 27713.html

📌 Raul [ThE KuKa] en phpBB 📌
✅ Jr. Extension Validator - Jr. Styles Validator - Style Customisations - Translator - International Support Team
✅

Si te gustan mis estilos, traducciones, etc. y quieres mostrar algo de aprecio, no dudes en hacer una donación Imagen
:flag_es: phpBB España - En línea desde 2003 :heart:



rafaxplayer
Observador/a
Mensajes: 48
Registrado: 23 Nov 2010, 15:46

Re: consulta mysql

#4

Mensaje por rafaxplayer »

ThE KuKa escribió: Creo que puedes descargar este MOD y comparar código para ver que código usa el autor para que aparezcan los últimos mensajes.
mmm le echado un vistazo pero no me acabo de aclarar con tanto código, ademas parece que este da últimos topics en general y lo mio es mas especifico "mensaje sin leer desde ultima visita de un usuario" , como veis mi consulta usa como base el username_clean en la busqueda , todo bien pero solo me faltaría completar eso ...que aparte de los mensajes desde ultima visita (que ya lo hace) fueran los NO vistos por el usuario, si conoceis algun script que lo haga seria de mucha ayuda. gracias
URL: http://amsspecialist.com
Versión phpBB: phpBB3 (3.0.11-PL1)
MODs Instalados:
- SyntaxHighlighter 1.0.12
- Very Simple Guest Hide BBCode MOD 1.0.1
Plantilla(s) usada(s): Comboot Freee
Servidor: Gratuito
Actualización desde otra versión: No
Conversión desde otro sistema de foros: No

rafaxplayer
Observador/a
Mensajes: 48
Registrado: 23 Nov 2010, 15:46

Re: consulta mysql

#5

Mensaje por rafaxplayer »

Bien ya lo tengo seria usar la funcion get_unreadPost de phpbb , solo que necesito esa funcion pero sin usar sessiones , solo a partir de una id de un usuario , ya he probado a traducirla a mysql sin sessiones pero no acabo de entender el codigo php y me he vuelto loco...XD

El codigo que tengo hasta ahora es esto :

Código: Seleccionar todo

include("config.php");
mysql_select_db($dbname,mysql_connect($dbhost,$dbuser,$dbpasswd));
$userdata = mysql_fetch_array(mysql_query("SELECT * FROM phpbb_users WHERE username_clean='".mysql_real_escape_string(strtolower($_GET['id']))."' LIMIT 1"));

if ($userdata!=false) {
    $fi=0;
	$query = mysql_query("select * from phpbb_topics where topic_last_post_time > '".$userdata['user_lastvisit']."' AND topic_last_post_time > '".$userdata['user_lastmark']."' ORDER BY topic_last_post_time DESC LIMIT 10");
	while ($data=mysql_fetch_array($query)) {	
		
		$query2=mysql_query("SELECT * FROM phpbb_posts WHERE topic_id='".$data["topic_id"]."' AND post_time > '".$userdata['user_lastvisit']."'");
		
		while ($data2=mysql_fetch_array($query2)) {
			$fi++;
            $posts[$data2["post_id"]]=$data2["post_text"];
		}
		
	}
} 
echo $fi."\r\n";
echo var_dump($posts);
Este código se ejecuta en un interval de 5 seg y con el consigo que me de los post que desde ultima visita y que no ha marcados como leidos , solo me faltaría saber como obtener los mismos pero no leidos aunque no se marken en el viculo de markar leidos , no se que datos de la base de datos regitran cuando lees un post o como hacer la consulta , ayuda por favor :wink:
URL: http://amsspecialist.com
Versión phpBB: phpBB3 (3.0.11-PL1)
MODs Instalados:
- SyntaxHighlighter 1.0.12
- Very Simple Guest Hide BBCode MOD 1.0.1
Plantilla(s) usada(s): Comboot Freee
Servidor: Gratuito
Actualización desde otra versión: No
Conversión desde otro sistema de foros: No

Avatar de Usuario
Alorse
Ex Staff
Mensajes: 5144
Registrado: 22 Mar 2008, 02:14
Género:
Edad: 37

Re: consulta mysql

#6

Mensaje por Alorse »

No entiendo, quieres leídos y no leídos por aparte o todos juntos?

rafaxplayer
Observador/a
Mensajes: 48
Registrado: 23 Nov 2010, 15:46

Re: consulta mysql

#7

Mensaje por rafaxplayer »

Alorse escribió:No entiendo, quieres leídos y no leídos por aparte o todos juntos?
A partir de un nombre de ususario , los mensajes desde última visita no leídos.
URL: http://amsspecialist.com
Versión phpBB: phpBB3 (3.0.11-PL1)
MODs Instalados:
- SyntaxHighlighter 1.0.12
- Very Simple Guest Hide BBCode MOD 1.0.1
Plantilla(s) usada(s): Comboot Freee
Servidor: Gratuito
Actualización desde otra versión: No
Conversión desde otro sistema de foros: No

Avatar de Usuario
Alorse
Ex Staff
Mensajes: 5144
Registrado: 22 Mar 2008, 02:14
Género:
Edad: 37

Re: consulta mysql  Tema Solucionado

#8

Mensaje por Alorse »

Intenta con lo siguiente, deja solo la consulta de $userdata y reemplaza las otras 2 por esta:

Código: Seleccionar todo

"SELECT t.topic_id, t.topic_last_post_time, tt.mark_time as topic_mark_time, ft.mark_time as forum_mark_time 
    FROM (phpbb_topics t) LEFT JOIN phpbb_topics_track tt 
    ON (tt.user_id = " . $userdata['user_id'] . " 
        AND t.topic_id = tt.topic_id) LEFT JOIN phpbb_forums_track ft 
        ON (ft.user_id =  " . $userdata['user_id'] . " 
            AND t.forum_id = ft.forum_id) WHERE t.topic_last_post_time > " . $userdata['user_lastvisit'] ." 
                AND( 
                (tt.mark_time IS NOT NULL AND t.topic_last_post_time > tt.mark_time) OR 
                (tt.mark_time IS NULL AND ft.mark_time IS NOT NULL AND t.topic_last_post_time > ft.mark_time) OR 
                (tt.mark_time IS NULL AND ft.mark_time IS NULL) 
                ) 
                AND t.topic_moved_id = 0 
                ORDER BY t.topic_last_post_time DESC 
                LIMIT 10"

rafaxplayer
Observador/a
Mensajes: 48
Registrado: 23 Nov 2010, 15:46

Re: consulta mysql

#9

Mensaje por rafaxplayer »

Perfecto! por lo que he probado hasta ahora funciona a la perfección , es una consulta complicada para mis conocimientos no la hubiera sacado en fácilmente , gracias por todo ;)
URL: http://amsspecialist.com
Versión phpBB: phpBB3 (3.0.11-PL1)
MODs Instalados:
- SyntaxHighlighter 1.0.12
- Very Simple Guest Hide BBCode MOD 1.0.1
Plantilla(s) usada(s): Comboot Freee
Servidor: Gratuito
Actualización desde otra versión: No
Conversión desde otro sistema de foros: No

Avatar de Usuario
Alorse
Ex Staff
Mensajes: 5144
Registrado: 22 Mar 2008, 02:14
Género:
Edad: 37

Re: consulta mysql

#10

Mensaje por Alorse »

Si, es una consulta un poco pesada, además que no se maneja la sintaxis de phpBB que lo hace mediante array para los LEFT y JOIN, además que no estabas teniendo en cuenta la tabla de topics_track que es la que almacena los temas leídos en caché, pero lo que importa es que ya te ha funcionado.

rafaxplayer
Observador/a
Mensajes: 48
Registrado: 23 Nov 2010, 15:46

Re: consulta mysql

#11

Mensaje por rafaxplayer »

Si después de estudiarlo ya he aprendido algunas cosas mas , solo tiene un defectillo y es que no me detecta cuando hay mas de un post nuevo dentro del mismo topic , yo uso el código así para hacer el contador de post nuevos sin leer:

Código: Seleccionar todo

<?php 
header("Expires: Sun, 19 Nov 1978 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

include("config.php");
mysql_select_db($dbname,mysql_connect($dbhost,$dbuser,$dbpasswd));
$userdata = mysql_fetch_array(mysql_query("SELECT * FROM phpbb_users WHERE username_clean='".mysql_real_escape_string(strtolower($_GET['id']))."' LIMIT 1"));

if ($userdata!=false) {
    $fi=0;
	$query = mysql_query("SELECT t.topic_id, t.topic_last_post_time, tt.mark_time as topic_mark_time, ft.mark_time as forum_mark_time 
    FROM (phpbb_topics t) LEFT JOIN phpbb_topics_track tt 
    ON (tt.user_id = " . $userdata['user_id'] . " 
        AND t.topic_id = tt.topic_id) LEFT JOIN phpbb_forums_track ft 
        ON (ft.user_id =  " . $userdata['user_id'] . " 
            AND t.forum_id = ft.forum_id) WHERE t.topic_last_post_time > " . $userdata['user_lastvisit'] ." 
                AND( 
                (tt.mark_time IS NOT NULL AND t.topic_last_post_time > tt.mark_time) OR 
                (tt.mark_time IS NULL AND ft.mark_time IS NOT NULL AND t.topic_last_post_time > ft.mark_time) OR 
                (tt.mark_time IS NULL AND ft.mark_time IS NULL) 
                ) 
                AND t.topic_moved_id = 0 ");
	while ($data=mysql_fetch_array($query)) {	
		
		$fi++;
		
	}
} 
echo $fi;

?>
creo que falta algo referente a la tabla de post, podría ser?
URL: http://amsspecialist.com
Versión phpBB: phpBB3 (3.0.11-PL1)
MODs Instalados:
- SyntaxHighlighter 1.0.12
- Very Simple Guest Hide BBCode MOD 1.0.1
Plantilla(s) usada(s): Comboot Freee
Servidor: Gratuito
Actualización desde otra versión: No
Conversión desde otro sistema de foros: No

Avatar de Usuario
Alorse
Ex Staff
Mensajes: 5144
Registrado: 22 Mar 2008, 02:14
Género:
Edad: 37

Re: consulta mysql

#12

Mensaje por Alorse »

rafaxplayer escribió:no me detecta cuando hay mas de un post nuevo dentro del mismo topic
Tienes razón, pero lastimosamente no sé como hacerlo y llevo un buen tiempo intentándolo tengo un MOD con lo que quiero hacer algo parecido, pero hasta ahora no he encontrado ninguna manera de hacerlo, al menos en phpBB, porque en otras plataformas si llevan dicho detalle.

rafaxplayer
Observador/a
Mensajes: 48
Registrado: 23 Nov 2010, 15:46

Re: consulta mysql

#13

Mensaje por rafaxplayer »

Alorse escribió:
rafaxplayer escribió:no me detecta cuando hay mas de un post nuevo dentro del mismo topic
Tienes razón, pero lastimosamente no sé como hacerlo y llevo un buen tiempo intentándolo tengo un MOD con lo que quiero hacer algo parecido, pero hasta ahora no he encontrado ninguna manera de hacerlo, al menos en phpBB, porque en otras plataformas si llevan dicho detalle.
Bueno yo al final si lo he conseguido adaptando esto a mi proyecto , la consulta la hago asi:

Código: Seleccionar todo

include("config.php");
mysql_select_db($dbname,mysql_connect($dbhost,$dbuser,$dbpasswd));
$userdata = mysql_fetch_array(mysql_query("SELECT * FROM phpbb_users WHERE username_clean='".mysql_real_escape_string(strtolower($_GET['id']))."' LIMIT 1"));

if ($userdata!=false) {
    
	$query = mysql_query("SELECT t.topic_id, t.topic_last_post_time, tt.mark_time as topic_mark_time, ft.mark_time as forum_mark_time 
    FROM (phpbb_topics t) LEFT JOIN phpbb_topics_track tt 
    ON (tt.user_id = " . $userdata['user_id'] . " 
        AND t.topic_id = tt.topic_id) LEFT JOIN phpbb_forums_track ft 
        ON (ft.user_id =  " . $userdata['user_id'] . " 
            AND t.forum_id = ft.forum_id) WHERE t.topic_last_post_time > " . $userdata['user_lastvisit'] ." 
                AND( 
                (tt.mark_time IS NOT NULL AND t.topic_last_post_time > tt.mark_time) OR 
                (tt.mark_time IS NULL AND ft.mark_time IS NOT NULL AND t.topic_last_post_time > ft.mark_time) OR 
                (tt.mark_time IS NULL AND ft.mark_time IS NULL) 
                ) 
                AND t.topic_moved_id = 0 ");
                $fi=0;
	while ($data=mysql_fetch_array($query)) {
	   $query2=mysql_query("SELECT post_id FROM phpbb_posts WHERE topic_id='".$data["topic_id"]."' AND post_time > '".$userdata['user_lastvisit']."'");
		
		while ($data2=mysql_fetch_array($query2)) {
		$fi++;
		}
		
		
		
	}
} 
echo $fi;
Esto me cuenta los post (no solo topics) no leidos desde ultima visita de el usuario X


Ahora tengo otra duda que consultarte , lo hago aquí porque tiene que ver con la construcción de mi html desde la consulta...
La pregunta es como construir la url para que el navegador muestre un post? no el inicio del topic , por ejemplo si el post esta en la pagina 12 del topic redireccione directamente ahí no a la pagina 1 que es lo que tengo con esto:

Código: Seleccionar todo

<a href='http://www.xxx.com/viewtopic.php?f=".$data["forum_id"]."&t=".$data["topic_id"]."' target='_blank'><b>".$data["topic_title"]."</b></a>
He provado de la siguiente manera porque viewtopic.php admite la variable p:

Código: Seleccionar todo

$post_id	= request_var('p', 0);

Código: Seleccionar todo

<a href='http://www.amsspecialist.com/viewtopic.php?f=".$data["forum_id"]."&t=".$data["topic_id"]."&p=".$data["topic_last_post_time"]."' target='_blank'><b>".$data["topic_title"]."</b></a>
pero no funciona siempre redirecciona al principio del topic.

Es posible lo que quiero lograr?
URL: http://amsspecialist.com
Versión phpBB: phpBB3 (3.0.11-PL1)
MODs Instalados:
- SyntaxHighlighter 1.0.12
- Very Simple Guest Hide BBCode MOD 1.0.1
Plantilla(s) usada(s): Comboot Freee
Servidor: Gratuito
Actualización desde otra versión: No
Conversión desde otro sistema de foros: No

Avatar de Usuario
Alorse
Ex Staff
Mensajes: 5144
Registrado: 22 Mar 2008, 02:14
Género:
Edad: 37

Re: consulta mysql

#14

Mensaje por Alorse »

Claro que es posible, pero lo estas haciendo mal, primero que todo no es solamente &p= sino también #p=, así que debería quedar algo así:

Código: Seleccionar todo

<a href='http://www.amsspecialist.com/viewtopic.php?f=".$data["forum_id"]."&t=".$data["topic_id"] . "&p=" . $data["topic_last_post_time"] . "#p=" . $data["topic_last_post_time"] . "' target='_blank'><b>".$data["topic_title"]."</b></a>
Creo que así debería funcionar.

towen
Moderador
Mensajes: 489
Registrado: 27 Dic 2011, 05:17
Género:
Edad: 29

Re: consulta mysql

#15

Mensaje por towen »

Creo que en vez de ser $data["topic_last_post_time"] debería ser $data["topic_last_post_id"], y también tendrías que seleccionar en la consulta a t.topic_last_post_id

Cerrado

Volver a “Foros de Soporte 3.0.x”