Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18

Discussione: [sql] aiuto con query

  1. #1

    [sql] aiuto con query

    vi espongo il mio problema...
    ho un database con queste tabelle

    contest_users - anagrafica utenti registrati
    contest_voti - associazione id_user e id_foto
    contest_foto - fotografie
    contest_category - categoria delle foto

    la mia applicazione funziona così:
    ci sono diverse categorie di foto, ogni foto è associata ad un categoria. solo gli utenti registrati hanno la possibilità di votare le foto...

    i voti vengono salvati nella tabella contest_voti associando:
    id_user - id_foto - numero voti

    prima di tutto volevo chiedervi se secondo voi questa struttura può essere corretta...
    in secondo luogo ho dovuto imporre dei limiti di voto:
    ogni utente può votare una voto al massimo 3 volte, e fin qui non ho problemi perchè basta una query del genere:

    SELECT f.img, f.description, v.numero_voti
    FROM contest_foto f
    LEFT JOIN contest_voti v
    ON f.id_foto = v.id_foto
    AND v.id_user = {$_SESSION['user_id']}
    WHERE f.id_foto = {$_GET['id_foto']}

    adesso ho la necessità di imporre ad ogni utente un massimo di 5 voti per ogni categoria. che query posso eseguire per avere il totale dei voti di un utente per ogni categoria)?

    grazie per l'eventuale aiuto
    This is a time in my life where everything is falling apart and at the same time it's all coming together
    That's Me

  2. #2
    se in mysql fossero utilizzabili le sub-select basterebbe fare una cosa del tipo...

    SELECT id_user, SUM(click)
    FROM contest_voti
    GROUP BY id_user
    HAVIN id_user = {$_SESSION['id_user']}
    AND id_foto IN ( SELECT id_foto
    FROM contest_foto
    WHERE id_category = {$_GET['id_category']} )

    almeno credo...
    ma come si può fare una query del genere in mysql?
    This is a time in my life where everything is falling apart and at the same time it's all coming together
    That's Me

  3. #3
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    Prova se funziona una cosa tipo questa:

    SELECT contest_category.id , SUM(contest_voti.numero_voti)
    FROM contest_voti INNER JOIN contest_category
    ON contest_voti.categoria=contest_category.id
    WHERE contest_voti.user=$id_user AND contest_category.id=$id_category
    GROUP BY contest_category.id

  4. #4
    Intanto grazie per l'aiuto....
    non ho ben capito questa istruzione:

    ON contest_voti.categoria=contest_category.id

    non ho una categoria associata alla tabella dei voti. ho solo l'id delle foto (oltre a id_user)...
    l'associazione id_foto - id_categoria è contenuta nella tab delle foto
    This is a time in my life where everything is falling apart and at the same time it's all coming together
    That's Me

  5. #5
    Potresti postare un dump delle strutture delle tabelle?
    Ciao
    In a world without walls and fences - who needs windows and gates ?

  6. #6
    #
    # Struttura della tabella `contest_category`
    #

    CREATE TABLE `contest_category` (
    `id_category` tinyint(2) NOT NULL auto_increment,
    `title` varchar(20) NOT NULL default '',
    `description` tinytext,
    PRIMARY KEY (`id_category`)
    ) TYPE=MyISAM;

    # --------------------------------------------------------

    #
    # Struttura della tabella `contest_foto`
    #

    CREATE TABLE `contest_foto` (
    `id_foto` tinyint(4) NOT NULL auto_increment,
    `id_category` tinyint(2) NOT NULL default '0',
    `data_ins` datetime default NULL,
    `img` varchar(30) default NULL,
    `description` tinytext,
    PRIMARY KEY (`id_foto`)
    ) TYPE=MyISAM;

    # --------------------------------------------------------

    #
    # Struttura della tabella `contest_users`
    #

    CREATE TABLE `contest_users` (
    `user_id` int(8) NOT NULL auto_increment,
    `data_ins` datetime NOT NULL default '0000-00-00 00:00:00',
    `nome` varchar(20) NOT NULL default '',
    `cognome` varchar(20) NOT NULL default '',
    `tel` varchar(20) default NULL,
    `indirizzo` varchar(20) default NULL,
    `citta` varchar(20) default NULL,
    `provincia` char(2) default NULL,
    `email` varchar(255) NOT NULL default '',
    `password` varchar(32) default NULL,
    PRIMARY KEY (`user_id`)
    ) TYPE=MyISAM;

    # --------------------------------------------------------

    #
    # Struttura della tabella `contest_voti`
    #

    CREATE TABLE `contest_voti` (
    `id_user` int(8) NOT NULL default '0',
    `id_foto` int(9) NOT NULL default '0',
    `click` int(9) default '1'
    ) TYPE=MyISAM;
    This is a time in my life where everything is falling apart and at the same time it's all coming together
    That's Me

  7. #7
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    Originariamente inviato da suicide_machine
    Intanto grazie per l'aiuto....
    non ho ben capito questa istruzione:

    ON contest_voti.categoria=contest_category.id

    non ho una categoria associata alla tabella dei voti. ho solo l'id delle foto (oltre a id_user)...
    l'associazione id_foto - id_categoria è contenuta nella tab delle foto
    Scusa, ero distratto. Devi solo aggiunger un join:

    FROM (contest_voti INNER JOIN contest_foto
    ON contest_voti.foto=contest_foto.id) INNER JOIN contest_category
    ON contest_category.id=contest_foto.categoria

    PS: mettici i nomi giusti.

  8. #8
    sembra che vada bene.... grazie mille! gentilissimo...
    This is a time in my life where everything is falling apart and at the same time it's all coming together
    That's Me

  9. #9
    continuo con questo thread per non aprire una nuova discussione...

    avrei bisogno ora di tenere delle statistiche sui voti assegnati alle foto per ogni settimana...

    del tipo:

    questa settimana:

    foto 1: 5 voti
    foto 2: 2 voti
    ecc...

    come potrei strutturare il db?
    This is a time in my life where everything is falling apart and at the same time it's all coming together
    That's Me

  10. #10
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    Aggiungi un attributo DATA sulla tabella dei voti.
    Poi per trovare i voti della settimana corrente fai una query del genere:

    WHERE WEEK(DATA)=WEEK(NOW()) AND YEAR(DATA)=YEAR(NOW())

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.