Visualizzazione risultati 1 fino 7 di 7

Discussione: Una query complicata da realizzare

  1. #1
    Guest

    Question Una query complicata da realizzare

    Salve,
    ho realizzato un piccolo sistema di messaggistica... ecco come è composta la tabella di nome "messages"...
    ID = id messaggio (auto_increment)
    senderid = id user che invia il messaggio
    reciverid = id user a cui è destinato il messaggio
    message = il messaggio
    check = record che controlla se il messaggio è stato visto (0 se no, 1 se si)
    time = ora dell'invio (formato => time())

    Vorrei realizzare una query che ovviamente mi seleziona tutti i campi che poi stampero con un while, maaaa... vorrei che non mi stampasse piu volte i messaggi dello stesso mittente! Nel senso se un 'senderid' ha inviato 10 messaggi al 'reciverid' io vorrei che si visualizzasse solo l'ultimo inviato (time) e non tutti... è possibile? se si, potreste dirmi la query???

    Infine, anche se non è importantissimo..., vorrei che i messaggi si ordinassero i questo modo: quelli con check=1 (cioè non ancora visti) prima e poi quelli con check=0 (non visti), e ovviamente dovrebbero ordinarsi anche in base al tempo (time)...

    GRAZIE IN ANTICIPO PER TUTTE LE RISPOSTE !!!!!!

  2. #2
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito

    Prima di tutto, cosa non molto importante ma il campo reciverid, in inglese ricevente, o destinatario in questo caso, non ci scrive reciver ma receiver, ti sei mangiato una e dopo la c.. era buona

    Cmq, a parte gli scherzi per l'ordinamento dovresti usare, all'interno della query, la clausola ORDER BY, questo sia per ordinare in base al valore del campo check e del campo time.

    Alla prima domanda non saprei come rispondere, non ci ho mai pensato a realizzare una cosa del genere, cioè, potresti utilizzare la clausola MAX() per vedere l'ultimo messaggio ricevuto, ma vederlo per ogni mittente non saprei come fare.

    Potresti provare con una semplice query di selezione a recuperare tutti gli id mittenti presenti nel database, poi per ogni id, che ad esempio memorizzi in una array potresti eseguire una query del genere:

    Codice:
    SELECT MAX(time) FROM messages WHERE senderid = valore_id LIMIT 1
    Non saprei pero se c'è un modo più semplice per farlo.
    Ultima modifica di sevenjeak : 18-07-2012 alle ore 17.21.52

    Sevenjeak
    Software developer and much more

  3. #3
    Guest

    Predefinito

    Si scusa è solo che non avevo ilo vocabolario sotto mano .... :)

    Ma come faccio ad inserire due condizioni order by ?

    Onestamente pero non ho capito molto bene cosa vorresti fare :S

  4. #4
    L'avatar di sevenjeak
    sevenjeak non è connesso AlterGuru
    Data registrazione
    25-10-2007
    Residenza
    Roma
    Messaggi
    1,767

    Predefinito

    La clausola order by accetta, come credo anche tutte le altre clausole del linguaggio sql, più condizione, dai un'occhiata qui:

    http://www.vbsimple.net/database/db_08_03.htm

    Ora che ci penso, invece di usare il metodo scritto da me qui sopra, per selezionare i messaggi di un unico mittente, potresti utilizzare la clausola GROUP BY, ma ora purtroppo non saprei come poter scrivere la query.
    Ultima modifica di sevenjeak : 18-07-2012 alle ore 20.12.59

    Sevenjeak
    Software developer and much more

  5. #5
    Guest

    Predefinito

    Ok, grazie comunque... mi sei stato lo stesso d'aiuto! Se ti viene in mente qualcosa postalo :) Grazie ancora

  6. #6
    Guest

    Predefinito

    Ho cercato su internet! E se usassi la funzione SELECT DISTINCT per selezionare solo una volta un id?

  7. #7
    Guest

    Predefinito

    Citazione Originalmente inviato da colore123 Visualizza messaggio
    Ho cercato su internet! E se usassi la funzione SELECT DISTINCT per selezionare solo una volta un id?
    Ma studiare prima no?
    Magari ti accorgi che esistono anche funzioni (di aggregazione) come GROUP BY ...

Regole di scrittura

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