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

    [MySQL] Subquery con campo SET

    Ciao Raga, urge aiutino
    Non capisco cosa sbaglio.
    ho queste 2 tabelle:

    tabella messaggi
    codice:
    CREATE TABLE `msg` (
      `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `msg_id` int(11) NOT NULL DEFAULT '0',
      `oggetto` varchar(200) NOT NULL,
      `corpo` text NOT NULL,
      `group_code_dest` set('1','2','4','3') DEFAULT NULL,
      `group_code_cc` set('1','2','4','3') DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=utf8;
    
    -- ----------------------------
    -- Records of msg
    -- ----------------------------
    INSERT INTO `msg` VALUES ('1', '1', 'Titolo primo messaggio', 'testo primo messaggio', '2', '1,4');
    INSERT INTO `msg` VALUES ('2', '2', 'Titolo secondo messaggio', 'testo secondo messaggio', '2', '1,4,3');
    INSERT INTO `msg` VALUES ('3', '3', 'Titolo terzo messaggio', 'testo terzo messaggio', '2', '4');
    
    -- ----------------------------
    -- Records of msg
    -- ----------------------------
    INSERT INTO `msg` VALUES ('1', '1', 'Titolo primo messaggio', 'testo primo messaggio', '2', '1,4');
    INSERT INTO `msg` VALUES ('2', '2', 'Titolo secondo messaggio', 'testo secondo messaggio', '2', '1,4,3');
    INSERT INTO `msg` VALUES ('3', '3', 'Titolo terzo messaggio', 'testo terzo messaggio', '2', '4');
    tabella utenti
    codice:
    CREATE TABLE `utenti` (
      `id` int(11) unsigned zerofill NOT NULL AUTO_INCREMENT,
      `codice_utente` varchar(10) NOT NULL,
      `nome` varchar(155) NOT NULL,
      `cognome` varchar(155) NOT NULL,
      `email` varchar(50) NOT NULL,
      `gruppo` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=583 DEFAULT CHARSET=latin1;
    
    -- ----------------------------
    -- Records of utenti
    -- ----------------------------
    INSERT INTO `utenti` VALUES ('00000000397', 'K417', 'Pietro', 'Cognome', 'Pietro@Cognome.it', '2');
    INSERT INTO `utenti` VALUES ('00000000398', 'W477', 'Mirko', 'Cognome', 'Mirko@Cognome.it', '2');
    INSERT INTO `utenti` VALUES ('00000000399', 'Q441', 'Marco', 'Cognome', 'Marco@Cognome.it', '2');
    INSERT INTO `utenti` VALUES ('00000000400', 'T958', 'Davide', 'Cognome', 'Davide@Cognome.it', '2');
    INSERT INTO `utenti` VALUES ('00000000401', 'X563', 'Matteo', 'Cognome', 'Matteo@Cognome.it', '1');
    INSERT INTO `utenti` VALUES ('00000000402', 'G342', 'Sergio', 'Cognome', 'Sergio@Cognome.it', '3');
    INSERT INTO `utenti` VALUES ('00000000403', 'H880', 'Marco', 'Cognome', 'Marco@Cognome.it', '1');
    INSERT INTO `utenti` VALUES ('00000000404', 'W575', 'Giacinto', 'Cognome', 'Giacinto@Cognome.it', '1');
    INSERT INTO `utenti` VALUES ('00000000405', 'Z059', 'Andrea', 'Cognome', 'Andrea@Cognome.it', '2');
    INSERT INTO `utenti` VALUES ('00000000406', 'A984', 'Vanes', 'Cognome', 'Vanes@Cognome.it', '1');
    INSERT INTO `utenti` VALUES ('00000000407', 'D790', 'Sandro', 'Cognome', 'Sandro@Cognome.it', '2');
    INSERT INTO `utenti` VALUES ('00000000408', 'X593', 'Marco', 'Cognome', 'Marco@Cognome.it', '1');
    INSERT INTO `utenti` VALUES ('00000000409', 'G370', 'Mauro', 'Cognome', 'Mauro@Cognome.it', '1');
    INSERT INTO `utenti` VALUES ('00000000410', 'T978', 'Carlo', 'Cognome', 'Carlo@Cognome.it', '1');
    INSERT INTO `utenti` VALUES ('00000000411', 'X533', 'Fabrizio', 'Cognome', 'Fabrizio@Cognome.it', '3');
    INSERT INTO `utenti` VALUES ('00000000412', 'D034', 'Michele', 'Cognome', 'Michele@Cognome.it', '1');
    INSERT INTO `utenti` VALUES ('00000000413', 'D512', 'Pierpaolo', 'Cognome', 'Pierpaolo@Cognome.it', '2');
    INSERT INTO `utenti` VALUES ('00000000414', 'D172', 'Roberto', 'Cognome', 'Roberto@Cognome.it', '1');
    INSERT INTO `utenti` VALUES ('00000000415', 'R982', 'Marco', 'Cognome', 'Marco@Cognome.it', '2');
    INSERT INTO `utenti` VALUES ('00000000416', 'L785', 'Francesco', 'Cognome', 'Francesco@Cognome.it', '1');
    INSERT INTO `utenti` VALUES ('00000000417', 'L795', 'Gianni', 'Cognome', 'Gianni@Cognome.it', '1');
    INSERT INTO `utenti` VALUES ('00000000418', 'A784', 'Stefano', 'Cognome', 'Stefano@Cognome.it', '1');
    INSERT INTO `utenti` VALUES ('00000000419', 'A689', 'Andrea', 'Cognome', 'Andrea@Cognome.it', '1');
    INSERT INTO `utenti` VALUES ('00000000421', 'C646', 'Piero', 'Cognome', 'Piero@Cognome.it', '4');
    INSERT INTO `utenti` VALUES ('00000000422', 'Z053', 'Vincenzo', 'Cognome', 'Vincenzo@Cognome.it', '1');
    INSERT INTO `utenti` VALUES ('00000000423', 'E817', 'Fabio', 'Cognome', 'Fabio@Cognome.it', '1');
    INSERT INTO `utenti` VALUES ('00000000496', 'X523', 'Simona', 'Cognome', 'Simona@Cognome.it', '2');
    INSERT INTO `utenti` VALUES ('00000000425', 'U429', 'Fabio', 'Cognome', 'Fabio@Cognome.it', '2');
    INSERT INTO `utenti` VALUES ('00000000426', 'M969', 'Paolo', 'Cognome', 'Paolo@Cognome.it', '2');
    INSERT INTO `utenti` VALUES ('00000000427', 'G387', 'Luca', 'Cognome', 'Luca@Cognome.it', '2');
    Se voglio tirare fuori per esempio quali gruppi di utenti devono ricevere l'email in cc imposto questa query, ma non funziona se lascio la subquery come sotto riportato
    codice:
    SELECT
    tb1.email,
    tb1.gruppo
    FROM utenti AS tb1
    WHERE tb1.gruppo IN (SELECT group_code_cc FROM msg WHERE id = 2)

    Invece se propri a scrivere direttamente; 1,2,3, funziona, mi aiutate a capire ?
    Thanks !

    codice:
    SELECT
    tb1.email,
    tb1.gruppo
    FROM utenti AS tb1
    WHERE tb1.gruppo IN (1,2,3)

  2. #2
    scusate ho scritto una ca... nella seconda in pratica la subquery funziona per forza visto che deve solo lavorare sul campo gruppo che è un int.

    Evidentemente ho bisogno di capire come lavorare con il campo SET che richiedete qualche attenzione maggiore, qualcuno può aiutarmi grazie.

  3. #3
    Mi aiutate per favore ?
    Ma se imposto così la subquery

    codice:
    SELECT group_code_cc FROM msg WHERE id = 2
    e il risultato è (per es) : 1,2,3
    non è la stessa cosa di scrivere dentro le parentesi; 1,2,3 ?

  4. #4
    nessuno ?

  5. #5
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,290
    Sinceramente non ho mai usato i SET di Mysql ma è facvile capire perchè non funziona.

    WHERE tb1
    .gruppo IN (1,2,3)
    Funziona perchè gruppo è un integer e la ricerca è valida se è 1, 2 o 3

    WHERE tb1.gruppo IN (SELECT group_code_cc FROM msg WHERE id =2)
    Fallisce perchè strai confrondando un Integer con un set di valori... e fallisce.

    Come fare la query però non ne ho idea.
    Non userei più in futuro i set in un database relazionale.

  6. #6

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.