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

    left join multipla con group by o cosa?

    ciao a tutti

    ho un piccolo problema con una query con piu left join .

    sto agendo su 4 tabelle, annunci, user, user_profile e images.

    ogni annuncio puo avere n immagini e ogni user puo inserire piu annunci che ha i propri dati sensibili dentro la tabella userprofile.

    devo far visualizzare tutti gli annunci attivi e ogni annuncio deve visualizzare solo una foto anche se ne ha molte perche altrimenti nel foreach avro gli stessi n annunci con le relative foto ma con una descrizione unica. come faccio a raggrupparle?

    questa è la mia query incompleta:

    Codice PHP:
    SELECT FROM annunci LEFT JOIN images on annunci.annunci_id images.entity_id left join user_profile on annunci.user_id user_profile.user_profile_id where available
    grazie e un saluto a tutti

  2. #2
    nessuno che mi puo dare una mano?

    avevo pensato di generarne due di query e fare il marge dei due risultati in un array sola piuttosto che due.

    ma il problema credo non si risolva perche non so cmq come far visualizzare una sola foto.

    altrimenti c'e un modo per varne visualizzare una e le altre metterle in un div nascosto e riutilizzarle con un highslide in jquery?

  3. #3
    innanzitutto usa gli alias , specie se devi fare dei left join con 4 tabelle.

    poi si, penso tu debba utilizzare distinct e group by.

    non fare così * ma tirati fuori dalla query solo i campi che ti servono effetitavamente:
    select distinct user.nome as nomeutente, images.file as file...

    fornisci maggiori informazioni sulla struttura delle tabelle e sulle loro relazioni, e dicci che ti tira fuori la query che hai scritto tu.

  4. #4
    restituisce tanti annunci quante sono le immagini anche se di fatto gli annunci sono molti di meno, in piu mi stampa le relative info sull'utente che ha caricato quell'annuncio ecc...

    ecco il diagramma vi mando il link dell'immagine

    http://yfrog.com/j9diagrammaj

  5. #5
    cioè in pratica se ad un annuncio sono associate tre immagini la query ti estrae quell'annuncio per tre volte...

    intanto prova e fai fai così

    SELECT DISTINCT ..... LEFT JOIN .... GROUP BY annunci.annunci_id

  6. #6
    ho provato mi dice questo:

    La colonna 'annunci.name' non è valida nell'elenco di selezione perché non è inclusa né in una funzione di aggregazione né nella clausola GROUP BY.

    se provo a eliminare i campi selezionati dopo "distinct" mi cambia il nome del campo nell'errore che è praticamente quello successivo a quello cancellato prima di eseguire la query

    es:

    Codice PHP:
    SELECT distinct annunci.annunci_idannunci.nameconvert(varchar(max), annunci.description) as testo_annunci FROM annunci LEFT JOIN images on annunci.annunci_id images.entity_id left join user_profile on annunci.user_id user_profile.user_profile_id  where available1 GROUP BY annunci.annunci_id 
    se cancellassi annunci.name mi da errore su annunci.description

  7. #7
    poi se tolgo il group by cmq mi da lo stesso problema della visualizzazione duplicata degli annunci in base alle immagini presenti in ogni annuncio anche con il distinct perche ovviamente devo inserire anche il campo image nel distinct ed ogni immagine ha un nome diverso quindi il distinct non fa piu il suo lavoro

  8. #8
    la query che hai postato adesso c'ha un po' di errori.

    prova questa con un solo left join, poi aggiungiamo le altre tabelle e le cluasole where:

    Codice PHP:
    SELECT DISTINCT annunci.annunci_idannunci.nameannunci.description AS testo_annunci
    FROM annunci
    LEFT JOIN images ON annunci
    .annunci_id images.entity_id
    GROUP BY annunci
    .annunci_id 

  9. #9
    mi da sempre lo stesso errore che ho scritto nella risposta precedente sul group by.... :-(

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 © 2024 vBulletin Solutions, Inc. All rights reserved.