+ Rispondi alla Discussione
Risultati da 1 a 4 di 4

SELECT complicato!

Ultimo Messaggio di fa_1976it il:
  1. #1
    User L'avatar di fa_1976it
    Data Registrazione
    Mar 2010
    Messaggi
    43

    SELECT complicato!

    Ciao a tutti,
    mi sto scervellando a cercare una soluzione per un mio problema ma non riesco a trovare l'input giusto:

    PROBLEMA: Ho un database nel quale sono salvati "utenti" ed i loro "contenuti" di immagini (path assoluto alle immagini).
    Ogni immagine ha oltre al path e l'id del suo proprietario anche il campo date per avere un ordine cronologico di inserimento.

    Ho la necessità di mostrare tramite php le ultime dieci immagini inserite, ma solo una per ogni utente in modo che se un utente invia ad esempio 20 immagini il box che mostra non sia pieno di immagini dalle foto di quel solo utente.

    Il mio problema è solo nella query da inviare al database.

    Qui sotto la query che usavo per mostrare le ultime 10 immagini senza tener conto dell'utente che l'ha inserita:

    Codice PHP:
    $query="SELECT * FROM media WHERE type='photo' ORDER BY date DESC LIMIT 10"

    Grazie dell'aiuto

  2. #2
    User L'avatar di codencode
    Data Registrazione
    Nov 2009
    Località
    Isernia
    Messaggi
    403
    Segui codencode su Twitter Aggiungi codencode su Google+ Aggiungi codencode su Facebook Aggiungi codencode su Linkedin Visita il canale Youtube di codencode
    L'unica soluzione che ora mi viene in mente, è quella di prendere gli ultimi 10 utenti che hanno postato una foto
    Codice PHP:
    $query="SELECT distinct(id_utente) FROM media WHERE type='photo' ORDER BY date DESC LIMIT 10"
    e poi prendere per ognuno di essi l'ultima foto postata, questo puoi farlo scorrendo il risultato della precedente query con un foreach e per ogni iterata esegui la seconda query.
    Web agency | codencode.it | posizionamentositointernet.net

  3. #3
    User L'avatar di OsteriaORistorante
    Data Registrazione
    Jun 2013
    Località
    Milano
    Messaggi
    38
    Segui OsteriaORistorante su Twitter Aggiungi OsteriaORistorante su Google+
    Ciao,
    se vuoi fare una select superfiga che estrae le ultime 10 immagini per utente ordinate per data, prova la seguente select:

    SELECT * FROM (
    SELECT S2.*, FIND_IN_SET(S2.date , (
    SELECT GROUP_CONCAT(date ORDER BY date DESC)
    FROM (SELECT * FROM media WHERE type='photo') S1
    WHERE S1.id_utente = S2.id_utente)) AS RANK
    FROM (SELECT * FROM media WHERE type='photo') S2
    ) a WHERE rank<=10

    è difficile da leggere, ma se riesci a capire come funziona, ti sarà di aiuto in tutti i casi dove avrai bisogno di un rank. E' simile al comando ORACLE RANK() OVER (PARTITION BY ID_UTENTE ORDER BY DATE)

    Ciao
    Mik

  4. #4
    User L'avatar di fa_1976it
    Data Registrazione
    Mar 2010
    Messaggi
    43
    Citazione Originariamente Scritto da OsteriaORistorante Visualizza Messaggio
    Ciao,
    se vuoi fare una select superfiga che estrae le ultime 10 immagini per utente ordinate per data, prova la seguente select:

    SELECT * FROM (
    SELECT S2.*, FIND_IN_SET(S2.date , (
    SELECT GROUP_CONCAT(date ORDER BY date DESC)
    FROM (SELECT * FROM media WHERE type='photo') S1
    WHERE S1.id_utente = S2.id_utente)) AS RANK
    FROM (SELECT * FROM media WHERE type='photo') S2
    ) a WHERE rank<=10

    è difficile da leggere, ma se riesci a capire come funziona, ti sarà di aiuto in tutti i casi dove avrai bisogno di un rank. E' simile al comando ORACLE RANK() OVER (PARTITION BY ID_UTENTE ORDER BY DATE)

    Ciao
    Mik
    Grazie a tutti per i suggerimenti ... mi avete "acceso" la lampadina!
    SELECT annidati etc ... oppure distinct() ...
    appena ho un attimo mi metto all'opera e vi dico quale metodo mi ha velocizzato l'otteniimento del risultato.

    Grazie

+ Rispondi alla Discussione

^ Permessi di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •  
  • Il codice BB è Attivato
  • Le faccine sono Attivato
  • Il codice [IMG] è Attivato
  • Il codice [VIDEO] è Attivato
  • Il codice HTML è Disattivato
  • Trackbacks Attivato
  • Pingback Attivato
  • Refback Attivato

SEO by vBSEO 3.6.0 PL2 ©2011, Crawlability, Inc.