Visualizzazione risultati 1 fino 10 di 10

Discussione: Trovare ultimo messaggio su forum

  1. #1
    Guest

    Predefinito Trovare ultimo messaggio su forum

    Salve, qualcuno sa dirmi come faccio a trovare l'ultimo messaggio inserito da un utente su un forum?
    Ho 3 tabelle, quella con le sezioni principali, quella con i titoli dei post (tabella 'discussioni') e quella con tutti i messaggi (tabella 'post').
    In pratica io gli faccio prendere l'id più grande da 'post' dove corrisponde l'id del titolo in 'discussioni', però se in 'discussioni' ho più titoli, lui mi prende sempre il primo o l'ultimo, in base a come li ordino (desc/asc).
    Se ho 3 titoli:
    Categoria principale: Benvenuti

    Contatti -> id 10
    Presentazioni -> id 31
    Supporto -> id 33

    e l'ultimo messaggio è in 'Presentazioni' come faccio a farglielo capire?
    Order by desc mi prenderebbe solo i messaggi di 'Supporto', mentre order by asc mi prenderebbe solo i messaggi di 'Benvenuti'.


    Spero di essermi spiegato bene
    Ultima modifica di competenzepertutti : 02-02-2015 alle ore 17.19.08

  2. #2
    Guest

    Predefinito

    Postare la struttura delle tabelle sarebbe utile XD Che con le parole ci si perde un attimo ;)

  3. #3
    Guest

    Predefinito

    Ok :P

    La tabella con le categorie principali:
    ID(ai)
    Titolo


    La tabella con i titoli delle varie discussioni aperte dagli utenti:
    ID(ai)
    forum_id (che si ricollega alla prima, in modo che tutto venga stampato automaticamente)
    autore
    titolo
    visite

    La tabella che contiene tutti i messaggi delle varie discussioni:
    ID(ai)
    topic_id (che come prima si ricollega alla seconda tabella)
    autore
    titolo
    testo


    Se serve altro te lo posto

  4. #4
    Guest

    Predefinito

    Riesci ad aiutarmi pxy?
    Magari attraverso la data? è solo che non saprei come fargli capire che deve controllare tutti e 3 i gruppi, perché mi controlla solo il primo o l'ultimo

  5. #5
    Guest

    Predefinito

    Fa niente, son riuscito a farlo aggiungendo alla tabella che contiene tutti i messaggi una cella che indica a che forum appartiene
    Grazie comunque

  6. #6
    Guest

    Predefinito

    Mmmh! Forse ho capito finalmente ciò che vuoi fare! è una Join!
    prova:

    Codice PHP:
    SELECT post.id as postId, post.autore, post.titolo, post.testo, discussioni.id as discId, discussioni.autore as discAutore, discussioni.titolo as discTitolo
    FROM post
    INNER JOIN discussioni
    ON post
    .topic_id=discussioni.id
    ORDER BY post
    .id DESC LIMIT 1

    Cosi tiri fuori in un colpo solo i dati relativi al post più recente e i dati della tabella "discussioni".



    Ps. per dovere di cronaca la cosa più semplice sarebbe stata postare la tua query sul forum dichiarando ciò che volevi ottenere, hai scelto la strada più complicata ;) ma vabbuò, sperò di aver risolto il tuo problema, fammi sapere se ho capito bene ciò che volevi!

  7. #7
    Guest

    Predefinito

    Ho provato ma anche così mi restituisce sempre l'ultimo post, in qualsiasi categoria esso sia, non so se capisci cosa intendo :P
    Aggiungendo invece una cella alla tabella post dove inserisco l'id della categoria principale alla quale il post appartiene, lui mi seleziona solo i post con l'id maggiore appartenenti a quella data categoria, e quindi usando un while, questo si ripete, e per ogni categoria mi tira fuori il suo post con id maggiore. XD
    Ah che casino! :P

  8. #8
    Guest

    Predefinito

    Tu vuoi gli ultimi post di ogni categoria?

    Se le categorie sono 3 vuoi l'utimo post della prima, l'ultimo post della seconda e l'ultimo post della 3°?
    In caso affermativo replico con questo:

    Codice PHP:
    SELECT post.id as postId, post.autore, post.titolo, post.testo, discussioni.id as discId, discussioni.autore as discAutore, discussioni.titolo as discTitolo, catPrinc.id as catPrincId, catPrinc.titolo as catPrincTitolo
    FROM post
    INNER JOIN discussioni
    ON post
    .topic_id=discussioni.id
    INNER JOIN categorie_principali catPrinc
    ON catPrinc
    .id=discussioni.forum_id
    GROUP BY catPrinc
    .id
    ORDER BY post
    .id DESC
    ps. categorie_principali è la tabella che da l'id a "forum_id" della tabella "discussioni" ma non so come l'hai chiamata tu, quindi l'ho chiamata categorie_principali.

    pps. Dio mio quanto è bello l'Sql *.*
    Ultima modifica di pxy : 05-02-2015 alle ore 16.28.35

  9. #9
    Guest

    Predefinito

    Nono se, per esempio, le categorie son 3 (ma potrebbero essere anche 50) io voglio che controlli su tutte tre quale è il post con id più alto. Non basta usare il MAX perché, primo, non mi funziona, ma comunque mi troverebbe l'id più alto tra tutti i post, anche tra quelli in altre categorie.
    Provo a farti un esempio pratico, seguendo questo forum.
    Nella schermata principale di esso ci sono varie categorie (che costituirebbero la tabella che tu hai chiamato categorie_principali)
    esempio:
    I servizi di altervista
    La pubblicità di altervista
    problemi tecnici account
    ecc...

    Se noi entriamo sul primo, "I servizi di AlterVista", troviamo le prime discussioni (ne prendo 3 per seguire l'esempio saltando quelle "in rilievo"):
    Configurare e risolvere problemi relativi al cloak con dominio di secondo livello!
    Ho richiesto il trasferimento da giallo zafferano ad altervista...
    Feed RSS....!?

    Facciamo dunque finta che la categoria "I servizi di AlterVista" abbia solo queste tre discussioni e torniamo indietro, alla pagina principale.

    A destra del titolo trovo scritto questo:

    "Configurare e risolvere...
    Postato da: devicetuto
    il Oggi alle 10.42.49"

    Questo mostra in che discussione, tra le 3 citate sopra, è stato scritto l'ultimo messaggio.
    Ho risolto questo aggiungendo alla tabella che contiene tutti i messaggi (l'ultima che ti ho scritto sopra), una cella che contiene l'id della categoria principale a cui appartiene (in questo caso sarebbe "I servizi di AlterVista") e quindi mi controlla solo i post che hanno questo id, e che quindi sono scritti nella prima categoria.
    Con un while, ogni categoria principale ha un suo id, e quindi il controllo viene fatto per ogni valore in categorie_principali.

    Spero di esser stato chiaro XD

  10. #10
    Guest

    Predefinito

    Se provi con il mega sql che ho postato ieri risolvi senza il while e senza dover aggiungere il campo ;)
    Praircamente usando Group by,order e inner join riesci a risolvere con solo sql, ma poi ogniuno decide che fare con il proprio codice XD

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •