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

    [MYSQL] campo incrociato (almeno credo)

    salve,
    chi mi aiuta a risolvere questa query? penso sia facile ma sono una neofita.

    ho 3 tabelle:

    Tabella CONTATTI (elenco dei contatti)
    idcontatto (chiave)
    nome
    cognome

    Tabella TIPO (elenco del tipo di contatto)
    idtipo (chiave)
    tipo (che può essere Radio, Tv, Internet, Stampa ecc.. NON sono un numero fissato)

    Tabella CONTATTI_TIPO (serve perchè un contatto può avere associato più tipi. es: mario rossi è sia un tipo di contatto Stampa sia Radio)
    idcontatto (chiave)
    idtipo (chiave)


    esempio:

    CONTATTI
    1 mario rossi
    2 marco bianchi
    3 matteo verdi

    TIPO
    1 radio
    2 tv
    3 internet
    4 stampa

    CONTATTI_TIPO
    1 1 (rossi è radio)
    1 4 (rossi è stampa)
    2 2 (bianchi è tv)
    3 2 (verdi è tv)
    3 3 (verdi è internet)

    problema:
    vorrei una query che mi restituisca:

    |NOME | COGNOME | RADIO | TV | INTERNET | STAMPA|
    ---------------------------------------------------------
    |mario | rossi | x | | | X|
    |marco| bianchi | | x | | |
    |matteo| verdi | | x | x | |

  2. #2
    La relazione che hai descritto si chiama "molti a molti"

    Puoi fare una query del genere


    SELECT C.nome, T.tipo FROM contatti AS C
    INNER JOIN contatti_tipo AS CT ON C.id = CT.id_contatti
    INNER JOIN tipo AS T ON T.id = CT.id_tipo

    Ti ho fatto un esempio di base.... poi lo adatti ai nomi dei tuoi campi e tabelle.
    Faranno fatica a credere, quelli che prendono le autorità per la verità, e non la verità come autorità.

  3. #3
    :master:
    credo che il discorso sia più complesso
    con la query che dici tu mi vengono due colonne "nome" e "tipo"

    e questo è il risultato:

    mario radio
    mario stampa
    bianchi tv
    verdi tv
    verdi internet

    se vedi l'esempio di quello che vorrei è avere tutti i "tipo" come intestazione di colonna e se un contatto è di quel tipo che venga segnato con una x nella colonna corrispondente.

  4. #4
    il campo "tipo" nella tabella TIPO cos'è ENUM?
    Faranno fatica a credere, quelli che prendono le autorità per la verità, e non la verità come autorità.

  5. #5
    con access sarebbe una cosa del genere ma ho bisogno di saperlo in mysql (e dovrei aggiungere anche, se il conteggio >0 restituisci una X).

    TRANSFORM Count(ContattiTipo.IDTipo) AS ConteggioDiIDTipo
    SELECT Contatti.Nome
    FROM Tipi INNER JOIN (Contatti INNER JOIN ContattiTipo ON Contatti.IDContatto = ContattiTipo.IDContatto) ON Tipo.IDTipo = ContattiTipo.IDTipo
    GROUP BY Contatti.Contatto
    PIVOT Tipo.Tipo;

  6. #6
    Originariamente inviato da Ugly Mau
    il campo "tipo" nella tabella TIPO cos'è ENUM?
    Faranno fatica a credere, quelli che prendono le autorità per la verità, e non la verità come autorità.

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    codice:
    select c.nome,c.cognome,
    max(case when tipo = 1 then 'x' else '' end) as radio,
    max(case when tipo = 2 then 'x' else '' end) as tv,
    max(case when tipo = 3 then 'x' else '' end) as internet,
    max(case when tipo = 4 then 'x' else '' end) as stampa
    from contatti_tipo as ct
    left join contatti as c
    on ct.contatto = c.id
    group by contatto

  8. #8
    quindi devo conoscere a priori quali saranno i valori della tabella TIPO.
    se aggiungo un record a TIPO devo modificare anche la query.

    non è possibile farlo in maniera dinamica come l'esempio che ho riportato in access?

  9. #9
    non dovrebbe essere contatti left join contattitipo?

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.