Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555

    Problema con join complessa

    Salve ragazzi,
    vi spiego il problema. Ho un database con diverse tabelle. Allora, una chiamata utenti, una organizzatori, una eventi e una ordini. In utenti vengono memorizzati i dati che degli utenti che si registrano nel sito. IN organizzatori le organizzazioni che intendono pubblicizzare i propri eventi. Pertanto la tabella eventi contiene tutti i dati relativi agli eventi inseriti dagli organizzatori. L'utente può quindi acquistare qualsiasi evento e l'ordine viene inserito nella tabella ordini. Per farvi capire posto le 4 tabelle

    CREATE TABLE `eventi` (
    `event_id` int(5) unsigned NOT NULL auto_increment,
    `organizzatore_id` int(3) NOT NULL,
    `evento` text NOT NULL,
    `luogo` text NOT NULL,
    `giorno` int(2) NOT NULL default '',
    `mese` int(2) NOT NULL default '',
    `anno` int(4) NOT NULL default '',
    `ora` int (4) NOT NULL default '',
    `oraporte` time NOT NULL,
    `descrizione` text NOT NULL,
    `biglietti` int(3),
    `disponibilita` int(3),
    `prezzo` decimal (5,2),
    `comunicazioni` text NOT NULL,
    `autore` varchar(50) NOT NULL default '',
    `data` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    `nome` varchar(50) NOT NULL default '',
    `size` varchar(25) NOT NULL default '',
    `type` varchar(25) NOT NULL default '',
    `immagine` longblob NOT NULL,
    `pub` int(1) NOT NULL default '0',
    PRIMARY KEY (`event_id`)
    )

    CREATE TABLE `ordini` (
    `ordine_id` int(5) NOT NULL auto_increment,
    `utente_id` int(5) NOT NULL,
    `event_id` int(5) NOT NULL,
    `numero` int(5),
    `totale` decimal (5,2),
    `data` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    PRIMARY KEY (`ordine_id`)
    )

    CREATE TABLE `organizzatori` (
    `organizzatore_id` int(3) NOT NULL auto_increment,
    `username` varchar(30) NOT NULL default '',
    `password` varchar(34) NOT NULL,
    `confermapassword` varchar(34) NOT NULL,
    `organizzazione` varchar(30) NOT NULL default '',
    `partitaiva` varchar(30) NOT NULL default '',
    `codicefiscale` varchar(30) NOT NULL default '',
    `cap` int(10) NOT NULL default '',
    `provincia` varchar(30) NOT NULL default '',
    `indirizzo` varchar(30) NOT NULL default '',
    `civico` int(5) NOT NULL default '',
    `mail` char(255) NOT NULL default '',
    `data` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    `ip` char(15) NOT NULL default '',
    PRIMARY KEY (`organizzatore_id`),
    UNIQUE KEY `id` (`organizzatore_id`),
    KEY `id_2` (`organizzatore_id`)
    )

    CREATE TABLE `utenti` (
    `utente_id` int(3) NOT NULL auto_increment,
    `username` varchar(30) NOT NULL default '',
    `password` varchar(34) NOT NULL,
    `confermapassword` varchar(34) NOT NULL,
    `nome` varchar(30) NOT NULL default '',
    `cognome` varchar(30) NOT NULL default '',
    `giorno` int(2) NOT NULL default '',
    `mese` int(2) NOT NULL default '',
    `anno` int(4) NOT NULL default '',
    `cap` int(10) NOT NULL default '',
    `provincia` varchar(30) NOT NULL default '',
    `indirizzo` varchar(30) NOT NULL default '',
    `civico` int(5) NOT NULL default '',
    `mail` char(255) NOT NULL default '',
    `data` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
    `ip` char(15) NOT NULL default '',
    PRIMARY KEY (`utente_id`),
    UNIQUE KEY `id` (`utente_id`),
    KEY `id_2` (`utente_id`)
    )


    Ora, cosa voglio fare? Ho creato un'area privata per gli organizzatori. IN quest'area vorrei che vi fosse un file che, per ogni evento da lui inserito, gli visualizzi quanti biglietti ha venduto per quell'evento. Come vedete nella tabella ordini troviamo un campo chiamato numero. Altro non è che il numero di biglietti acquistato da un utente tramite un form. Poi nella tabella eventi trovate il campo biglietti. Questo è il totale di biglietti che l'organizzatore inserisce in database. Il numero di biglietti venduto per un determinato evento altro non è che il numero di biglietti acquistato per quell'evento da tutti gli utenti.

    Come mettere in relazione le diverse tabelle?

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Nessuno che può darmi uno spunto, un'idea?

  3. #3
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Più che altro non si capisce quale sia il problema.
    Da come le hai descritte, le tabelle sembrano già relazionate correttamente.

    Quindi?

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Il problema non è la relazione, bensì la query che mi permetta di estrarre i dati che mi servono. Ossia il numero di biglietti venduto per ogni singolo evento. Praticamente l'organizzatore entra nella sua area utente, clikka su un link e viene visualizzato una sorta di archivio eventi dove per ogni singolo evento visualizza il totale di biglietti venduti.

  5. #5
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Prova


    SELECT eventi.event_id, sum(ordini.numero) FROM eventi join ordini using event_id
    WHERE eventi.organizzatore_id = xxxx
    GROUP BY eventi.event_id


    Ovviamente l'id dell'organizzatore saprai tu qual è

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Grazie mille, adesso provo e vediamo un pò se funziona

  7. #7
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    Ho provato la query in questo modo

    $query_limit = mysql_query("SELECT utenti.*, eventi.evento as strEvento, ordini.*,
    date_format(ordini.data,'%d-%m-%Y %H:%i') AS dataora
    FROM utenti
    INNER JOIN ordini ON ordini.utente_id = utenti.utente_id
    INNER JOIN eventi ON eventi.event_id = ordini.event_id
    WHERE utenti.utente_id ='".$_GET['id']."' Order by ordine_id Desc LIMIT $primo, $per_page") or die( mysql_error() . "
    " . $sql);

    ma mi da quest'errore di sintassi

    Errore di sintassi nella query SQL vicino a 'event_id WHERE eventi.organizzatore_id = '3' GROUP BY eventi.event_id LIMIT 0,' linea 1

  8. #8
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    L'errore che hai postato non c'entra nulla con la query

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2006
    Messaggi
    555
    E da cosa dipenderebbe scusa

  10. #10
    Utente di HTML.it L'avatar di luca200
    Registrato dal
    Apr 2002
    Messaggi
    4,120
    Questo lo dovresti dire tu.

    Nell'errore è riportato "WHERE eventi.organizzatore_id = '3'"
    Nella query che tu hai postato quel pezzo di codice non c'è

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.