[GDRCD 5.6.5] Ricerca e lista per id_messaggio_padre postato il 15/01/2023 08:47:23 nel forum programmazione, gdrcd e open source e modificato da iunius il 28/01/2023 11:32:15
Ciao.
Ho creato un semplice tool di ricerca nel forum, ma ho un problema quando vado a visualizzare i risultati nella pagina visit.inc
Sostanzialmente mi stampa tutti i singoli risultati, non tenendo conto del topic principale. Il mio obiettivo, invece, è quello di stampare solo il topic principale (id messaggio padre) a cui l'id_messaggio della ricerca ha prodotto il risultato.
$ricerca = $_POST['ricerca'];
/*Carico l'elenco dei forum*/
$result = gdrcd_query("SELECT MA.id_messaggio, MA.titolo, MA.autore, MA.data_messaggio, MA.data_ultimo_messaggio, MA.importante, MA.chiuso, AL.id 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']."' WHERE MA.id_messaggio_padre = -1 AND MA.id_araldo = ".gdrcd_filter('num', $_REQUEST['what'])." AND MA.messaggio LIKE %ricerca% ORDER BY MA.importante DESC, MA.data_ultimo_messaggio DESC LIMIT ".$pagebegin.", ".$PARAMETERS['settings']['posts_per_page']."", 'result');
Pagine → 1 2
20/01/2023 10:33:13
Hai provato con GROUP BY MA.id_messaggio_padre prima di ORDER BY?
« Dalla glaciazione di cristallo, noi rinasceremo »
http://crystaltokyo.altervista.org
28/01/2023 11:29:38
Anche usando la tua soluzione il risultato è lo stesso. Vedo sempre una lista di messaggi singoli, e non la lista dei topic principali.
28/01/2023 15:41:15
Se ho capito bene, ti dovresti aspettare un risultato simile a quello che ti darebbe una simile query:
SELECT
IF(MAP.id_messaggio IS NOT NULL, MAP.id_messaggio, MA.id_messaggio) idMessage,
IF(MAP.id_messaggio IS NOT NULL, MAP.titolo, MA.titolo) titleMessage,
IF(MAP.id_messaggio IS NOT NULL, MAP.data_ultimo_messaggio, MA.data_ultimo_messaggio) lastMessageDate
FROM messaggioaraldo AS MA
LEFT JOIN araldo_letto AS AL ON MA.id_messaggio = AL.thread_id AND AL.nome='".$_SESSION['login']."'
LEFT JOIN messaggioaraldo AS MAP ON MA.id_messaggio_padre = MAP.id_messaggio
WHERE
MA.id_araldo = ".gdrcd_filter('num', $_REQUEST['what'])."
AND MA.messaggio LIKE %ricerca%
GROUP BY
idMessage
ORDER BY
MA.importante DESC,
MA.data_ultimo_messaggio DESC
LIMIT ".$pagebegin.", ".$PARAMETERS['settings']['posts_per_page'].""
GitHub: https://github.com/GDRCD/GDRCD
Discord: https://discord.com/invite/K2eWXpvu4M
GdR-O: https://www.gdr-online.com/readforum.asp?id=250579
28/01/2023 22:44:04
kasa ha scritto: Se ho capito bene, ti dovresti aspettare un risultato simile a quello che ti darebbe una simile query:
SELECT
IF(MAP.id_messaggio IS NOT NULL, MAP.id_messaggio, MA.id_messaggio) idMessage,
IF(MAP.id_messaggio IS NOT NULL, MAP.titolo, MA.titolo) titleMessage,
IF(MAP.id_messaggio IS NOT NULL, MAP.data_ultimo_messaggio, MA.data_ultimo_messaggio) lastMessageDate
FROM messaggioaraldo AS MA
LEFT JOIN araldo_letto AS AL ON MA.id_messaggio = AL.thread_id AND AL.nome='".$_SESSION['login']."'
LEFT JOIN messaggioaraldo AS MAP ON MA.id_messaggio_padre = MAP.id_messaggio
WHERE
MA.id_araldo = ".gdrcd_filter('num', $_REQUEST['what'])."
AND MA.messaggio LIKE %ricerca%
GROUP BY
idMessage
ORDER BY
MA.importante DESC,
MA.data_ultimo_messaggio DESC
LIMIT ".$pagebegin.", ".$PARAMETERS['settings']['posts_per_page'].""
28/01/2023 22:58:26
La query sopra deve andare a sostituire quella che usi nel gdrcd_query nel topic principale e deve essere riempita con tutte le variabili mancanti e che potrebbero invero esserti utile per la ricerca, quali ad esempio %ricerca% (credo che qui andrebbe messo altro, in formato '%".gdrcd_filter('in', $ricerca)."%'), e successivamente verificare le altre.
Per la questione della tabella con alias MAP, questa l'ho inserita per andare a ricavare le informazioni del messaggio padre in caso di un match nella ricerca con una risposta ad un topic, attraverso appunto la colonna 'MAP.id_messaggio_padre'.
Così hai modo poi di ottenere le informazioni del messaggio padre.
Kasa.
GitHub: https://github.com/GDRCD/GDRCD
Discord: https://discord.com/invite/K2eWXpvu4M
GdR-O: https://www.gdr-online.com/readforum.asp?id=250579
29/01/2023 11:32:01
kasa ha scritto: La query sopra deve andare a sostituire quella che usi nel gdrcd_query nel topic principale e deve essere riempita con tutte le variabili mancanti e che potrebbero invero esserti utile per la ricerca, quali ad esempio %ricerca% (credo che qui andrebbe messo altro, in formato '%".gdrcd_filter('in', $ricerca)."%'), e successivamente verificare le altre.
Per la questione della tabella con alias MAP, questa l'ho inserita per andare a ricavare le informazioni del messaggio padre in caso di un match nella ricerca con una risposta ad un topic, attraverso appunto la colonna 'MAP.id_messaggio_padre'.
Così hai modo poi di ottenere le informazioni del messaggio padre.
Kasa.
<form caction="main.php?page=forum&op=search&where=<?php echo gdrcd_filter('out', $row['id_araldo']); ?>" method="post">
<div align="center">
<input name="ricerca" />
<input type="submit" value="cerca" />
</div>
</form>
29/01/2023 13:05:58
Se provi a cambiare questo:
".gdrcd_filter('num', $_REQUEST['what'])."
".gdrcd_filter('num', $_REQUEST['where'])."
GitHub: https://github.com/GDRCD/GDRCD
Discord: https://discord.com/invite/K2eWXpvu4M
GdR-O: https://www.gdr-online.com/readforum.asp?id=250579
29/01/2023 13:58:46 e modificato da iunius il 29/01/2023 13:59:31
kasa ha scritto: Se provi a cambiare questo:
Kasa.
GDRCD MySQLi Error [Line: 224]
Error Code: 1064
Error String: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
Error Detail: SELECT MAX(data_messaggio) AS latest, COUNT(*) AS replies FROM messaggioaraldo WHERE id_messaggio_padre =
while($row = gdrcd_query($result, 'fetch')) {
$readinfo = gdrcd_query("SELECT MAX(data_messaggio) AS latest, COUNT(*) AS replies FROM messaggioaraldo WHERE id_messaggio_padre = ".gdrcd_filter('get', $row['id_messaggio']));
29/01/2023 14:53:19
Questo errore è derivato dal fatto che nella query che ti ho passato in SELECT ho messo degli alias per identificare i campi che mi servono, mentre in tutto il resto della pagina vengono ancora richiesti i campi estratti con la vecchia nomenclatura. Dovrebbe essere sufficiente utilizzare al posto dei miei alias i nomi delle colonne originali e aggiungere le colonne mancanti, usando sempre la formula dell' IF per prenderla o da MA o da MAP, e poi dovrebbe andare.
Kasa.
GitHub: https://github.com/GDRCD/GDRCD
Discord: https://discord.com/invite/K2eWXpvu4M
GdR-O: https://www.gdr-online.com/readforum.asp?id=250579
29/01/2023 14:57:50
kasa ha scritto: usando sempre la formula dell' IF per prenderla o da MA o da MAP, e poi dovrebbe andare.
Kasa.
Discussione seguita da
Pagine → 1 2
Aggiungi ai Preferiti Inoltra Discussione Forum Programmazione, GDRCD e Open Source Elenco Forum
breathofspring ha aperto un annuncio di ricerca: Breath of Spring ricerca Beta Tester
✋😟
Abbiamo rilevato che stai usando un software per bloccare la pubblicità!
L'utilizzo di GDR-online.com è gratuito da oltre 18 anni ma è necessario coprire i costi per mantenerlo online... ti chiediamo di aiutarci disabilitando il blocco dei banner pubblicitari.
Togliere il blocco significa fare in modo che GDR-online.com possa continuare a far conoscere piccoli giochi amatoriali gratuitamente e offrire un servizio sempre migliore e adatto alle esigenze dei suoi giocatori!
Se questo avviso continua ad apparire nonostante tu abbia autorizzato il portale:
- Verifica nelle opzioni che venga disattivato AdBlock in tutto il dominio gdr-online.com e non solo in una pagina
- Controlla di non avere fra le estensioni installate altre analoghe ad AdBlock, come AdBlock Plusbr, ublock origin, ecc.
- Probabilmente sul tuo PC è installato un Antivirus che ha anche funzioni di blocco pubblicità
- Se usi Firefox impostare il "Blocco Contenuti" su "Normale" e non su "Restrittivo". Per farlo clicca sull'icona dello scudo vicino all'URL e clicca su "Disattiva Blocco per questo sito"
- Prova a premere CTRL + F5, riloggarti e vedi se il problema persiste