Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [MY SQL] query group by + order by

    salve a tutti, forse mi sto solo incartando su me stesso..
    volevo chiedervi consiglio su come fare questa query, e magari spiegazioni sul perchè non funziona..
    Allora: Ho una tabella di conversazione tra 2 utenti che contiene (id_conversazione, id_utente_passivo, id_utente-attivo, data).. ho bisogno di trovare tutte le persone con cui un determinato utente ha parlato (anche solo inviato o ricevuto senza risposta) e di ordinarle per data...usavo questa query:

    SELECT id_Utente_passivo (tutte le persone a cui l'utente ha scritto con risposta o no)
    FROM conversazione
    WHERE id_Utente_attivo = 2 (l'utente in questione)
    GROUP BY id_Utente_passivo (contati solo una volta..forse anche DISTINCT)

    UNION
    SELECT id_Utente_attivo (tutte le persone che hanno scritto all'utente con risposta o no)
    FROM conversazione
    WHERE id_Utente_passivo = 2 (l'utente in questione)
    GROUP BY id_Utente_attivo (contati solo una volta)

    che effettivamente mi da il risultato sperato, ma senza ordinare per data...se provo ad inserire ORDER BY data, mi da errore..
    potete aiutarmi?!

  2. #2
    aggiungi la data nella select ed anche un identificativo perche' saranno tutti chiamati id_utente_passivo. es.:

    codice:
    SELECT data, 'passivo' as tipo, id_Utente_passivo 
    FROM conversazione
    WHERE id_Utente_attivo = 2
    GROUP BY id_Utente_passivo 
    UNION
    SELECT data, 'attivo' as tipo, id_Utente_attivo
    FROM conversazione
    WHERE id_Utente_passivo = 2
    GROUP BY id_Utente_attivo
    order by data

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    giusto! nella select mi dovevo portare dietro anche la data..
    l'unica cosa, non mi ero spiegato effettivamente bene.
    cosi effettivamente potrei distinguere tra mittente e destinatari.
    nel caso io invece volessi che questi contatti vengano selezionati una e una sola volta indipendentemente se sono attivi o passivi?!
    ora infatti mi ordina by data, e mi segna 2 volte il contatto una volta mittente e una volta destinatario. nel caso io volessi che me lo segna una sola volta in base all'ultimo messaggio scambiato? (o come mittente o come destinatario)
    grazie e grazie per la risposta tempestiva

  4. #4
    Mi sembra strana la struttura della tua tabella. doppio id_utente, ricerca incrociata tra gli stessi id (cerchi id_utente_passivo dove id_utente_attivo ma l'id e' lo stesso), il group by, la union ...

    Carica il result set su un array e ripulisci i doppioni con il php. Oppure visto che non importa se attivo/passivo fai una sola colonna id_utente invece di due e con una query cerca max(data).

    codice:
    select max(data) as data, id_utente
    from tabella
    group by id_utente
    order by data

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

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.