Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    371

    Query di Periodo con valori nulli

    Ragazzi ho questa query che mi estrae il numero di eventi di un determinato periodo dal db
    Codice PHP:
    SELECT  CONCAT(MONTH(calendar.start),'/',YEAR(calendar.start)) As Periodocount(calendar.id) as totevent,tb_odl.Odl_Desc AS Evento FROM calendar LEFT JOIN tb_odl ON calendar.id_odl tb_odl.id                    WHERE calendar.start <= DATE(NOW())+ INTERVAL 1 DAY                    GROUP By calendar.id_odl,MONTH(calendar.start)                   ORDER BY Periodo 
    estraendo i dati in questo modo:
    Codice PHP:
    [    {        "Periodo""1/2021",        "Evento""Test1",        "totevent"69    },    {        "Periodo""2/2021",        "Evento""Test1",        "totevent"97    },    {        "Periodo""3/2021",        "Evento""Test1",        "totevent"115    },    {        "Periodo""4/2021",        "Evento""Test1",        "totevent"10    },
        {        
    "Periodo""3/2021",        "Evento""Test2",        "totevent"22    },    {        "Periodo""4/2021",        "Evento""Test2",        "totevent"3    },    {        "Periodo""4/2021",        "Evento""Test3",        "totevent"23    }   ] 
    ma a me servirebbe che per i periodi in cui non trova dati es: Periodo "01/2021" di "Test2" mi dia un record con il valore "0" ossia dovrei ottenere quanto segue:
    Codice PHP:
    [    {        "Periodo""1/2021",        "Evento""Test1",        "totevent"69    },    {        "Periodo""2/2021",        "Evento""Test1",        "totevent"97    },    {        "Periodo""3/2021",        "Evento""Test1",        "totevent"115    },    {        "Periodo""4/2021",        "Evento""Test1",        "totevent"10    },
        {        
    "Periodo""1/2021",        "Evento""Test2",        "totevent"0    },    {        "Periodo""2/2021",        "Evento""Test2",        "totevent"0    },    {        "Periodo""3/2021",        "Evento""Test2",        "totevent"22    },    {        "Periodo""4/2021",        "Evento""Test2",        "totevent"3    },
        {        
    "Periodo""1/2021",        "Evento""Test3",        "totevent"0    },    {        "Periodo""2/2021",        "Evento""Test3",        "totevent"0    },    {        "Periodo""3/2021",        "Evento""Test3",        "totevent"0    },    {        "Periodo""4/2021",        "Evento""Test3",        "totevent"23    }   ] 
    Avete una soluzione da proporre ???
    Grazie 1000.
    Ultima modifica di max1974; 15-04-2021 a 09:20

  2. #2
    hai periodi vuoti? devi crearti una tabella con TUTTI i periodi e poi metterla in LEFT JOIN con le tue; dove non trova niente avrai il tuo zero

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    371
    Con poca inventiva ho creato la tabella "periodi" ed ho caricato i 4 record "1/2021;2/2021;3/2021;4/2021";
    codice:
    CREATE TABLE IF NOT EXISTS `tb_periodi` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `Periodo` varchar(50) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
    INSERT INTO `tb_periodi` (`id`, `Periodo`) VALUES
    (1, '1/2021'),
    (2, '2/2021'),
    (3, '3/2021'),
    (4, '4/2021');


    Ho eseguito la query precedente inserendo la riga "LEFT JOIN tb_periodi ON Periodo = tb_periodi.periodo"
    ma il risultato non cambia, come il precedente, dove sbaglio.
    codice:
    SELECT  CONCAT(MONTH(calendar.start),'/',YEAR(calendar.start)) As Periodo, count(calendar.id) as totevent,tb_odl.Odl_Desc AS Evento FROM calendar LEFT JOIN tb_odl ON calendar.id_odl = tb_odl.id LEFT JOIN tb_periodi ON Periodo = tb_periodi.periodo                   WHERE calendar.start <= DATE(NOW())+ INTERVAL 1 DAY                    GROUP By calendar.id_odl,MONTH(calendar.start)                   ORDER BY Periodo 

  4. #4
    prima di vedere cos'è, postiamo delle query ordinate pls
    codice:
    SELECT 
      CONCAT(MONTH(calendar.start), '/', YEAR(calendar.start)) As Periodo, 
      count(calendar.id) as totevent, 
      tb_odl.Odl_Desc AS Evento 
    FROM 
      calendar 
      LEFT JOIN tb_odl ON calendar.id_odl = tb_odl.id 
      LEFT JOIN tb_periodi ON Periodo = tb_periodi.periodo 
    WHERE 
      calendar.start <= DATE(NOW())+ INTERVAL 1 DAY 
    GROUP By 
      calendar.id_odl, 
      MONTH(calendar.start) 
    ORDER BY 
      Periodo
    se c'è ordine, è più facile

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2007
    Messaggi
    371
    Si Vero,
    Ricevo gli stessi risultati iniziali.

    codice:
    [ 
    {"Periodo": "1/2021","Evento": "Test1","totevent": 69},
    {"Periodo": "2/2021","Evento": "Test1","totevent": 97},
    {"Periodo": "3/2021","Evento": "Test1","totevent": 115},
    {"Periodo": "4/2021","Evento": "Test1","totevent": 10},
    {"Periodo": "3/2021","Evento": "Test2","totevent": 22},
    {"Periodo": "4/2021","Evento": "Test2","totevent": 3},
    {"Periodo": "4/2021","Evento": "Test3","totevent": 23}
    ] 
    Invece a me necessiterebbe ricevere questo:
    codice:
    [ 
    {"Periodo": "1/2021","Evento": "Test1","totevent": 69},
    {"Periodo": "2/2021","Evento": "Test1","totevent": 97},
    {"Periodo": "3/2021","Evento": "Test1","totevent": 115},
    {"Periodo": "4/2021","Evento": "Test1","totevent": 10},
    
    {"Periodo": "1/2021","Evento": "Test2","totevent": 0},
    {"Periodo": "2/2021","Evento": "Test2","totevent": 0},
    {"Periodo": "3/2021","Evento": "Test2","totevent": 22},
    {"Periodo": "4/2021","Evento": "Test2","totevent": 3},
    
    {"Periodo": "1/2021","Evento": "Test3","totevent": 0},
    {"Periodo": "2/2021","Evento": "Test3","totevent": 0},
    {"Periodo": "3/2021","Evento": "Test3","totevent": 0},
    {"Periodo": "4/2021","Evento": "Test3","totevent": 23}
    ] 
    Grazie.

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