Visualizzazione dei risultati da 1 a 5 su 5

Discussione: SELECT complicata

  1. #1

    SELECT complicata

    Salve, ho due tabelle: amici e messaggi.

    La tabella amici è semplice, strutturata così:

    email | amico |
    --------------

    e la tabella messaggi:

    email | messaggio | data |
    -------------------------


    Nella tabella amici ovviamente ci sono gli amici, in modo 'reciproco', ad esempio:


    email | amico |
    --------------
    a@a.it | b@b.it |
    b@b.it | a@a.it |
    ----------------


    E la tabella messaggi:


    email | messaggio | data |
    -------------------------
    a@a.it | test | DATA |
    b@b.it | test2 | DATA |
    c@c.it | test3 | DATA |
    ---------------------------

    Mettiamo caso che io sono l' utente a@a.it, quindi ho come amico b@b.it e l' utente c@c.it è sconosciuto.

    Ora sorge il problema: devo fare una select dei messaggi, selezionandone solo 10 (quindi limit 0,10) ordinati "per i più recenti" (quindi suppongo ORDER BY data DESC). Il problema è che devo selezionare queste 10 mischiate tra le mie (quindi tra i messaggi scritti da a@a.it) e quelli dei miei amici (in questo caso solo di b@b.it), mentre quelli di c@c.it, fino a quando non lo aggiungo come amico non li potrò visualizzare.

    Come faccio?
    Social Network in costruzione.. Misto tra Twitter e Facebook.. Twitbook o facetter?

  2. #2
    Non sono ferratissimo con l'SQL per cui probabilmente vi sono soluzioni più eleganti e performanti, ma prova così:

    codice:
    SELECT messaggio FROM messaggi WHERE email = 'mia_email' OR email = (SELECT amico FROM amici WHERE email = 'mia_email') ORDER BY data DESC
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  3. #3
    Ma calcolando che c'è piu' di un amico nella realtà, come faccio? Dovrei fare un while?
    Social Network in costruzione.. Misto tra Twitter e Facebook.. Twitbook o facetter?

  4. #4
    Non mi sembra che nella select da me postata ci sia un limite al numero di amici.
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

  5. #5
    Sostituisci l'= con IN:

    codice:
    SELECT messaggio FROM messaggi WHERE email = 'mia_email' OR email IN (SELECT amico FROM amici WHERE email = 'mia_email') ORDER BY data DESC
    "Mai discutere con un idiota. Ti trascina al suo livello e ti batte con l'esperienza." (Oscar Wilde)

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.