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

    [PHP - SQL] Suddividere e contare i record

    Salve a tutti! Ho un piccolo problema a definire una query SQL, spero (anzi, sono sicuro) possiate aiutarmi...

    Ho una struttura a 2 tabelle, così fatta:
    codice:
    CREATE TABLE `prenes_esami` (
      `es_id` smallint(5) unsigned NOT NULL auto_increment,
      `es_docente` varchar(255) NOT NULL default '',
      `es_materia` varchar(255) NOT NULL default '',
      `es_dataesame` int(10) unsigned NOT NULL default '0',
      `es_datainizio` int(10) unsigned NOT NULL default '0',
      `es_datafine` int(10) unsigned NOT NULL default '0',
      `es_note` text,
      PRIMARY KEY  (`es_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
    
    CREATE TABLE `prenes_iscritti` (
      `is_id` smallint(5) unsigned NOT NULL auto_increment,
      `is_es_id` smallint(5) unsigned NOT NULL default '0',
      `is_cognome` varchar(255) NOT NULL default '',
      `is_nome` varchar(255) NOT NULL default '',
      `is_matricola` varchar(255) default NULL,
      `is_telefono` varchar(255) default NULL,
      `is_email` varchar(255) default NULL,
      `is_note` varchar(255) default NULL,
      `is_data` int(10) unsigned NOT NULL default '0',
      PRIMARY KEY  (`is_id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
    La prima tabella serve a memorizzare appelli d'esame, la seconda le iscrizioni ai suddetti appelli. Quel che dovrei fare è estrarre tutti gli appelli, contare quanti iscritti ci sono per ciascun appello, e visualizzare gli appelli raggruppati per Nome Docente e Materia, in modo da usare questi due campi come "titolo" ed elencare sotto i relativi appelli.

    Sto giostrando un po con le funzioni di count() e group() ma non riesco ad ottenere il risultato corretto... E' un bel po che non tocco SQL...

    Grazie a tutti!

  2. #2
    Prova così:

    SELECT prenes_esami.es_docente, prenes_esami.es_materia, COUNT(prenes_iscritti.is_id) AS 'Totale Iscritti' FROM prenes_esami LEFT JOIN prenes_iscritti ON prenes_esami.es_id = prenes_iscritti.is_es_id GROUP BY prenes_esami.es_docente, prenes_esami.es_materia;


  3. #3
    Ti ringrazio della risposta. Si avvicina molto al risultato che vorrei ottenere, che per inciso è rappresentato nella pagina

    http://www.flett.unict.it/flett/prenotazioneesami/

    anche se credo che dovrò inserire una terza tabella, separando esami ed appelli, per raggiungerlo... Comunque per questo devo parlare prima con chi dovrà utilizzarlo.

    Per il momento ho modificato la query in questo modo:
    codice:
    SELECT prenes_esami.*, COUNT(prenes_iscritti.is_id) AS tot_iscritti FROM prenes_esami LEFT JOIN prenes_iscritti ON prenes_esami.es_id = prenes_iscritti.is_es_id WHERE prenes_esami.es_dataesame > '.time().' GROUP BY prenes_esami.es_id ORDER BY prenes_esami.es_docente, prenes_esami.es_materia
    per ottenere una rappresentazione di tutti gli appelli con relativo numero di iscritti.

    Grazie mille, a presto!

  4. #4
    Ti consiglio di:

    1) Separare Esami ed Appelli. Quindi avrai due tabelle. Una esami che avrà id_esame, docente materia ecc ecc. L'altra avrà id_appello, id_esame (chiave esterna), data_ora. Gli iscritti faranno riferimento all'appello e non all'esame.

    2) In un primo momento selezioni tutti gli esami. Quindi:
    Codice PHP:
    $myQuery = @mysql_query("SELECT * FROM esami"); 
    Poi per ogni esame estrai gli appelli e il numero di iscritti:
    Codice PHP:
    while($myRow mysql_fetch_assoc($myQuery))
    {
         
    // stampa le cose che ti servono

         
    $myAppelli = @mysql_query("SELECT appelli.*, COUNT(prenes_iscritti.is_id) AS tot_iscritti FROM appelli LEFT JOIN prenes_iscritti ON appelli.id_appello = prenes_iscritti.is_id_appello GROUP BY appelli.id_appello");
         while(
    $myRowAppelli mysql_fetch_assoc($myAppelli))
         {
              
    // stampa le cose che ti servono
         
    }


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.