(Risolto! GdrCD 5.4) Forum: Ordinamento cronologico thread
(Risolto! GdrCD 5.4) Forum: Ordinamento cronologico thread postato il 05/12/2018 12:04:08 nel forum programmazione, open source e hosting e modificato da cookie il 07/03/2021 19:16:35
Buondì a tutti!
Sto cercando di risolvere una pecca del Forum base del pacchetto 5.4: l'ordinamento cronologico dei Thread in base all'ultima risposta postata... insomma, come solitamente funzionano i forum.
Attualmente il sistema ordina i thread in base alla data del messaggio-padre, senza cambiare l'ordine se all'interno di thread più vecchi vengono postati messaggi più recenti.
Se ne era già discusso per il pacchetto 5.1 (https://www.gdr-online.com/readforum.asp?id=158663 ↗) ed ho provato ad adattare la soluzione di Dyrr alla 5.4. Premessa: ho applicato questa patch (https://www.gdr-online.com/download_dettaglio.asp?id=288 ↗) così ho lavorato su quel codice, che è compatibile sia con la versione 5.4 sia con quanto scritto da Dyrr in quel thread.
In ogni caso non credo che le versioni di GdrCD siano una discriminante, infatti credo che il problema stia nel codice che ne ho ricavato, che funziona solo in parte.
L'adattamento è questo:
*Carico l'elenco dei forum*/
$result = gdrcd_query("
SELECT MA.id_messaggio, MA.titolo, MA.autore, MA.data_messaggio, MA.importante, MA.chiuso, AL.id, COALESCE(U.ultimo_msg, MA.data_messaggio)
AS new_msg
FROM messaggioaraldo AS MA
LEFT JOIN araldo_letto AS AL
ON MA.id_messaggio=AL.thread_id AND AL.nome='".$_SESSION['login']."'
LEFT JOIN (SELECT MAX(data_messaggio) AS ultimo_msg, id_messaggio_padre
FROM messaggioaraldo
WHERE id_messaggio_padre <> -1
GROUP BY id_messaggio_padre) AS U
ON MA.id_messaggio = U.id_messaggio_padre
WHERE MA.id_messaggio_padre = -1 AND MA.id_araldo = ".gdrcd_filter('num',$_REQUEST['what'])." ORDER BY MA.importante DESC, U.ultimo_msg DESC, MA.data_messaggio DESC
LIMIT ".$pagebegin.", ".$PARAMETERS['settings']['posts_per_page']."", 'result');
... e funziona molto bene per i thread con almeno una risposta, tuttavia lascia per ultimi i thread ancora senza risposta anche se cronologicamente più recenti.
Esempio:
Ora: da quanto ho capito la funzione COALESCE dovrebbe sistemare questo problema, tuttavia non funziona. Una zampa?
Pagine → 1
05/12/2018 13:28:43
prova con:
SELECT MA.id_messaggio, MA.titolo, MA.autore, MA.data_messaggio, MA.importante, MA.chiuso, AL.id AS new_msg , COALESCE( U.prova, MA.data_messaggio ) AS ultimo_messaggio
05/12/2018 14:59:22 e modificato da cookie il 07/03/2021 19:17:02
blackmoon ha scritto: prova con:
SELECT MA.id_messaggio, MA.titolo, MA.autore, MA.data_messaggio, MA.importante, MA.chiuso, AL.id AS new_msg , COALESCE( U.prova, MA.data_messaggio ) AS ultimo_messaggio
Quindi bastava assegnarli un alias dedicato.
Così funziona, grazie mille! <3
24/01/2019 10:22:01
Chop ho provato personalmente e funziona con tutte le versioni :)
Le discussioni messe in evidenza, almeno per quanto ho potuto vedere nelle mie prove, restano tali :)
24/01/2019 11:46:13
blackmoon ha scritto: Chop ho provato personalmente e funziona con tutte le versioni :)
Le discussioni messe in evidenza, almeno per quanto ho potuto vedere nelle mie prove, restano tali :)
potresti postare il codice completo di quel pezzo? a me francamente da errore :\
24/01/2019 12:33:45 e modificato da blackmoon il 24/01/2019 14:32:45
irenes ha scritto:
potresti postare il codice completo di quel pezzo? a me francamente da errore :\
Eccotelo, ma sostituisci gli apici che il forum li cambia :)
*Carico l'elenco dei forum*/
$result = gdrcd_query("
SELECT MA.id_messaggio, MA.titolo, MA.autore, MA.data_messaggio, MA.importante, MA.chiuso, AL.id AS new_msg , COALESCE( U.prova, MA.data_messaggio ) AS ultimo_messaggio
FROM messaggioaraldo AS MA
LEFT JOIN araldo_letto AS AL
ON MA.id_messaggio=AL.thread_id AND AL.nome='".$_SESSION['login']."'
LEFT JOIN (SELECT MAX(data_messaggio) AS ultimo_msg, id_messaggio_padre
FROM messaggioaraldo
WHERE id_messaggio_padre <> -1
GROUP BY id_messaggio_padre) AS U
ON MA.id_messaggio = U.id_messaggio_padre
WHERE MA.id_messaggio_padre = -1 AND MA.id_araldo = ".gdrcd_filter('num',$_REQUEST['what'])." ORDER BY MA.importante DESC, U.ultimo_msg DESC, MA.data_messaggio DESC
LIMIT ".$pagebegin.", ".$PARAMETERS['settings']['posts_per_page']."", 'result');
Di caricamenti ce ne sono due, attenta che questo va sotto:
//Conteggio record totali
<3
24/01/2019 14:09:52
grazie!
ora provo :)
solo una cosa: in questo codice c'è U.prova
immagino che sia una tua modifica al DB. bisogna lasciare U.ultimo_msg?
24/01/2019 14:33:22
irenes si, scusa non mi ero accorta di aver postato quello con tutte le modifiche XD
l'ho aggiornato <3
24/01/2019 18:37:29
irenes ha scritto: grazie!
ora provo :)
solo una cosa: in questo codice c'è U.prova
immagino che sia una tua modifica al DB. bisogna lasciare U.ultimo_msg?
nulla, se sostituisco in questo modo modo non da errore ma il codice non fa :<
28/01/2019 14:29:25
irenes ha scritto: [quote]irenes ha scritto: grazie!
ora provo :)
solo una cosa: in questo codice c'è U.prova
immagino che sia una tua modifica al DB. bisogna lasciare U.ultimo_msg?
nulla, se sostituisco in questo modo modo non da errore ma il codice non fa :<[/quote]
Prova così:
*Carico l'elenco dei forum*/
$result = gdrcd_query("
SELECT MA.id_messaggio, MA.titolo, MA.autore, MA.data_messaggio, MA.importante, MA.chiuso, AL.id AS new_msg,
COALESCE(U.ultimo_msg, MA.data_messaggio) AS ultimo_messaggio
FROM messaggioaraldo AS MA
LEFT JOIN araldo_letto AS AL
ON MA.id_messaggio=AL.thread_id AND AL.nome='".$_SESSION['login']."'
LEFT JOIN (SELECT MAX(data_messaggio) AS ultimo_msg, id_messaggio_padre
FROM messaggioaraldo
WHERE id_messaggio_padre <> -1
GROUP BY id_messaggio_padre) AS U
ON MA.id_messaggio = U.id_messaggio_padre
WHERE MA.id_messaggio_padre = -1 AND MA.id_araldo = ".gdrcd_filter('num',$_REQUEST['what'])."
ORDER BY MA.importante DESC, ultimo_messaggio DESC, MA.data_messaggio DESC
LIMIT ".$pagebegin.", ".$PARAMETERS['settings']['posts_per_page']."", 'result');
Discussione seguita da
Pagine → 1
Rispondi alla Discussione Segui Discussione Inoltra Discussione Forum Programmazione, Open Source e Hosting Elenco Forum
Articoli, Interviste e altre Risorse!
Storie di Agarthi ↗
Imperion ↗
Raja Dunia ↗
AlterEgo ↗
Wuthering Waves ↗
Fallen Gods ↗
Cafuné ↗