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

    [MySQL] Problema Join tramite campo formato SET

    Ciao Raga urge aiutino

    semplifico i campi delle 2 tabelle per la bisogna:

    tabella anagrafica gruppi
    id
    codice_gruppo - formato SET (1,2,3,4,5,6)
    descrizione_gruppo - formato VARCHAR 100

    tabella dei dati
    id - formato INT 11
    titolo - formato VARCHAR 100
    testo - formato VARCHAR 300
    codice_gruppo - formato SET


    devo tirare fuori la descrizione_gruppo utilizzando come dato univoco per la JOIN il campo codice_gruppo. Come faccio ?



    .

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    select d.descrizione_gruppo from anagrafica a, dati d where a.codice_gruppo = d.codice_gruppo

  3. #3
    Uhm ...
    Purtroppo non è cosi semplice,
    forse non sono stato abbastanza chiaro, il campo SET all'interno della tabella dati contiene più valori (2,4,7)
    adesso quello che vorrei fare è recuperare dalla tabella anagrafica le descrizione per tutti i codici (2, 4, 7)
    ognuno ovviamente è un gruppo utente.

    avevo già impostato una JOIN simile alla tua indicazione
    codice:
    SELECT
    tb1.id_news,
    tb2.descrizione_gruppo
    FROM news_notify AS tb1
    INNER JOIN anagrafica_gruppi_notifiche AS tb2 ON tb1.code_notify_groups IN (tb2.code_notify_groups)
    ma ovviamente per ogni id (nel mio caso news) mi estrae un solo valore, ovvero;
    codice:
    id_news     |  descrizione_gruppo
    250           |   HM
    251           |   SM 
    252           |   AOM
    253           |   OM
    Invece io vorrei

    codice:
    id_news     |   descrizione_gruppo
    250           |   HM, SM
    251           |   SM, AOM, OM
    252           |   AOM, HM
    253           |   OM

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    puoi farmi il dump delle due tabelle con alcuni valori dentro di prova così provo in locale?

  5. #5
    Quote Originariamente inviata da zacca94 Visualizza il messaggio
    puoi farmi il dump delle due tabelle con alcuni valori dentro di prova così provo in locale?

    codice:
    -- ----------------------------
    -- Table structure for `0_anagrafica_gruppi`
    -- ----------------------------
    DROP TABLE IF EXISTS `0_anagrafica_gruppi`;
    CREATE TABLE `0_anagrafica_gruppi` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `codice_gruppo` set('8','100','0','7','6','5','4','3','2','1') NOT NULL DEFAULT '0',
      `descrizione_gruppo` varchar(10) NOT NULL,
      PRIMARY KEY (`id`),
      UNIQUE KEY `group_code` (`codice_gruppo`) USING BTREE
    ) ENGINE=MyISAM AUTO_INCREMENT=10 DEFAULT CHARSET=latin1 COMMENT='Livelli utenti, field, guest, superadmin, etc.';
    
    -- ----------------------------
    -- Records of 0_anagrafica_gruppi
    -- ----------------------------
    INSERT INTO `0_anagrafica_gruppi` VALUES ('1', '1', 'NMU');
    INSERT INTO `0_anagrafica_gruppi` VALUES ('2', '2', 'HOU');
    INSERT INTO `0_anagrafica_gruppi` VALUES ('3', '3', 'AOM');
    INSERT INTO `0_anagrafica_gruppi` VALUES ('4', '4', 'SM');
    INSERT INTO `0_anagrafica_gruppi` VALUES ('5', '5', 'HM');
    INSERT INTO `0_anagrafica_gruppi` VALUES ('6', '6', 'DM');
    INSERT INTO `0_anagrafica_gruppi` VALUES ('7', '7', 'OM');
    INSERT INTO `0_anagrafica_gruppi` VALUES ('8', '100', 'ALL');
    INSERT INTO `0_anagrafica_gruppi` VALUES ('9', '8', 'SUP');
    codice:
    -- ----------------------------
    -- Table structure for `0_id_news`
    -- ----------------------------
    DROP TABLE IF EXISTS `0_id_news`;
    CREATE TABLE `0_id_news` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `codice_gruppo` set('0','1','2','3','4','5','6','7','100') NOT NULL DEFAULT '0' COMMENT 'questo serve come gruppo di notifiche utenti',
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=31 DEFAULT CHARSET=latin1 COMMENT='la tabella degli utenti';
    
    -- ----------------------------
    -- Records of 0_id_news
    -- ----------------------------
    INSERT INTO `0_id_news` VALUES ('1', '7');
    INSERT INTO `0_id_news` VALUES ('2', '0');
    INSERT INTO `0_id_news` VALUES ('3', '100');
    INSERT INTO `0_id_news` VALUES ('4', '100');
    INSERT INTO `0_id_news` VALUES ('5', '100');
    INSERT INTO `0_id_news` VALUES ('6', '100');
    INSERT INTO `0_id_news` VALUES ('7', '100');
    INSERT INTO `0_id_news` VALUES ('8', '100');
    INSERT INTO `0_id_news` VALUES ('9', '100');
    INSERT INTO `0_id_news` VALUES ('10', '100');
    INSERT INTO `0_id_news` VALUES ('11', '100');
    INSERT INTO `0_id_news` VALUES ('12', '0');
    INSERT INTO `0_id_news` VALUES ('13', '0');
    INSERT INTO `0_id_news` VALUES ('14', '100');
    INSERT INTO `0_id_news` VALUES ('15', '100');
    INSERT INTO `0_id_news` VALUES ('16', '0');
    INSERT INTO `0_id_news` VALUES ('17', '100');
    INSERT INTO `0_id_news` VALUES ('18', '100');
    INSERT INTO `0_id_news` VALUES ('19', '0');
    INSERT INTO `0_id_news` VALUES ('20', '3,7');
    INSERT INTO `0_id_news` VALUES ('21', '100');
    INSERT INTO `0_id_news` VALUES ('22', '100');
    INSERT INTO `0_id_news` VALUES ('23', '100');
    INSERT INTO `0_id_news` VALUES ('24', '0');
    INSERT INTO `0_id_news` VALUES ('25', '2,3,4,5,7');
    INSERT INTO `0_id_news` VALUES ('26', '100');
    INSERT INTO `0_id_news` VALUES ('27', '3,6,7');
    INSERT INTO `0_id_news` VALUES ('28', '100');
    INSERT INTO `0_id_news` VALUES ('29', '100');
    INSERT INTO `0_id_news` VALUES ('30', '100');

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    Ciò che stai cercando di fare, scusa la critica è errato e strutturato male, per poterlo fare devi lavorare sulle stringhe (possibile) ma comunque dispendioso.

    SELECT
    news.id,
    anagrafica.descrizione_gruppo
    FROM
    0_id_news AS news
    INNER JOIN
    0_anagrafica_gruppi AS anagrafica
    ON news.codice_gruppo REGEXP REPLACE(anagrafica.codice_gruppo, ',', '|')

    Dopodichè devi lavorarlo con una array, se ti serve solo sapere se il gruppo è valido aggiungi uno WHERE

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    Oltretutto se fa IN campo, il campo viene letto come stringa e quindi non conforme

  8. #8
    Grande ! Mi mancava l'REGEXP REPLACE !

    per avere il raggruppamento sullo stesso record ho completato così;
    codice:
    SELECT
    tb1.id,
    GROUP_CONCAT(DISTINCT tb2.descrizione_gruppo ORDER BY tb2.descrizione_gruppo DESC SEPARATOR ', ') AS desc_gruppo
    FROM 0_id_news AS tb1
    LEFT JOIN 0_anagrafica_gruppi AS tb2 ON tb1.codice_gruppo REGEXP REPLACE(tb2.codice_gruppo, ',', '|')
    GROUP BY tb1.codice_gruppo, tb1.id
    ORDER BY tb1.id ASC

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.