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

    [MySQL] Problema con JOIN

    Ciao, non sono molto esperto di JOIN ed ho il seguente problema che non riesco a risolvere:
    ho strutturato un database contente i riferimenti a del materiale multimediale relazionato a dei determinati soggetti; avendo ogni tipo di file (video, immagine, documento, ...) caratteristiche diverse ho inserito ognuno di questi in tabelle diverse e relazionato i record all'id del soggetto.
    Ora devo recuperare questi dati e pensavo di poterlo fare tutto in una query del genere:

    codice:
    SELECT DISTINCT
    			v.id,v.filevideo,v.titolo,v.soggetto,
    			s.idsoggetto, s.cognome, s.nome, s.paese, s.descrizione,
    			d.idsoggetto, d.nomedoc, d.titolodoc,
    			i.idsoggetto, i.nomefile						
    			FROM soggetti AS s 
    			LEFT JOIN video AS v ON v.soggetto = s.idsoggetto  
    			LEFT JOIN docs AS d ON d.idsoggetto = s.idsoggetto
    			LEFT JOIN immagini AS i ON i.idsoggetto = s.idsoggetto 			
    			WHERE s.idsoggetto = '".$_GET['idsoggetto']."'";
    Il problema è che in questo modo mi butta tutto assieme nel fetch, ovvero mi ritrovo sia video, docs ed immagini nello stesso fetch con la conseguente complicazione nel mostrare i dati ed inoltre ripetizione degli stessi, ad es.: se ho 3 video ed 1 doc mi ritrovo (giustamente) 6 righe mentre io ne vorrei unicamente 4.

    Spero di essermi spiegato...qualcuno potrebbe darmi un consiglio ??
    Ho provato a "smanettare" la JOIN ma non cambia nulla... :master:

    Grazie !!
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

  2. #2
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    a parte che 3 video e 1 doc = 6 righe non è che mi torni tanto... ma va beh, è secondario

    Il problema è che a livello logico, per ottenere quello che vuoi dovresti usare una union, non una join. Ma per fare una union devi avere dei resultset uniformi, cioè formati dallo stesso numero di colonne con le stesse caratteristiche. Siccome i tuoi dati non sono così, le possibilità che ti rimangono sono due:
    1) fai una query distinta per ogni tipo di prodotto
    2) provi a creare una union facendo corrispondere le colonne dello stesso tipo e riempiendo con dei null nelle query dove mancano dati

  3. #3
    Grazie, mi ristudio la situation !! :rollo:
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

  4. #4
    Non avendole mai usate le UNION sto cercando di capirci qualcosa ora...:
    Se unisco più query complete di JOIN, WHERE e ORDER ( $q1 UNION $q2),
    posso poi ordinarle nuovamente rispetto ad un campo contenuto in una tabella che è in JOIN con entrambe ??
    Chiarisco: entrambe le query saranno in JOIN con la tabella principale di anagrafica, se voglio riunire i dati relativi ad uno stesso utente in ordine alfabetico ovviamente non basta ordinare le due query in ordine alfabetico !!
    Il mio futuro ?? Io lo conosco, è il PARTY !! (Party Man)
    ...e ricordati che prima o poi il po-chi gira (Il Maestro)

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.