Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Problema selezione

  1. #1

    Problema selezione

    Gentili utenti di HTML.it,
    mi rivolgo a voi perché devo scrivere un codice che non ho la possibilità di testare.
    Vi comunico la mia esigenza:

    Sto realizzando uno script che raccoglie da una tabella chat in cui sono presenti i vari id utenti insieme ai loro messaggi.

    Struttura tabella:
    id (identificativo univoco riga), id_sender (id di chi invia), id_receiver (id a cui è rivolto), text (testo del messaggio), send_time (timestamp intero di quando è stato inviato il messaggio).

    Praticamente lo script che devo creare (di cui a voi chiedo soltanto la query per estrarre i dati) deve restituirmi un elenco di chat una per ogni utente in cui è presente l'ultimo messaggio scambiato.

    Quindi la query dovrebbe interrogare il db, guardare dove l'id dell utente di cui vogliamo estrarre le "discussioni" è presente nei campi id_sender o id_receiver e associargli l'ultima messaggio di testo che è stato comunicato tra i due (ordine cronologico comprensibile da send_time).

    un esempio di dati estratti: (presupponendo che 1 sia l'id dell'utente di cui vogliamo estrarre le conversazioni):

    1,2, ciao come va, 998282292999
    1, 4, ciao tutto bene, 383888888333
    3, 1, si ok bello oggi, 383883838383
    7, 1, la vita mia, 9393939399393
    1, 74, la terra si gira, 393939939393

    i primi due sono gli id degli utenti (e l'id 1 deve appunto esserci), il secondo è il messaggio, e l'ultimo è il timestamp del messaggio.

    La mia attuale query è impostata cosi:

    "SELECT id_sender, id_receiver, text, MAX(send_time) FROM ib_chat WHERE id_sender = $id OR id_receiver = $id GROUP BY id_sender, id_receiver"

    ma temo sia errata.
    Grazie per l'attenzione e spero in un riscontro. Buona serata

  2. #2
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    select * from ib_chat where id_sender = $id or id_receiver = $id order by send_time desc limit 1

    (sintassi mysql... non hai detto qual è il db, mi pare)

  3. #3
    Ciao è per mysql, ma in questo modo ottengo soltanto un risultato a me ne serve uno distinto per ogni utente con cui è presente una chat... cmq grazie per l'intervento.

  4. #4
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Non avevo capito cosa volevi fare.

    select c.id_sender, c.id_receiver, c.send_time, c.text from ib_chat c join
    (select if (id_sender = $id, id_receiver, id_sender) as ctp, max(send_time) from ib_chat where id_sender = $id or id_receiver = $id
    group by ctp) as ext on (((c.id_sender = $id and c.id_receiver = ctp.id_receiver) or (c.id_sender = ctp.id_sender and c.id_receiver = $id)) and c.send_time = ext.send_time)

    Provala, ma non garantisco niente

  5. #5
    Grazie appena testo ti do un feedback

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.