Visualizzazione risultati 1 fino 6 di 6

Discussione: SELECT complicata

  1. #1
    Guest

    Predefinito 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?

  2. #2
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Ci riesci con una query annidata:
    Codice:
    SELECT *
    FROM messaggi
    WHERE email IN (
       SELECT amico
       FROM amici
       WHERE email = 'mia_email'
    ) OR email = 'mia_email'
    ORDER BY data DESC
    LIMIT 0, 10
    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  3. #3
    Guest

    Predefinito

    Scusa, una domanda, così non funziona?

    Codice PHP:
    SELECT messaggio FROM messaggi WHERE email = 'mia_email' OR email = (SELECT amico FROM amici WHERE email = 'mia_email') ORDER BY data DESC LIMIT 0, 10

  4. #4
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Scritta così, no: la SELECT annidata può restituire più record e non puoi confrontare un insieme con un singolo valore.

    Per questo motivo, devi usare l'operatore IN (o, se preferisci, = ANY)...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  5. #5
    Guest

    Predefinito

    Ok grazie, un' ultima cosa.. Sulla query da te scritta devo fare un while per mostrare i messaggi giusto?

  6. #6
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Sì, come per qualsiasi altra query...

    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

Regole di scrittura

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