Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di JoeP
    Registrato dal
    May 2004
    Messaggi
    558

    [MySQL] Aiuto per query complicata

    Ho un DB MySQL per un sito di concorsi fotografici. Per ogni concorso i partecipanti inviano una foto, poi loro stessi voteranno le foto inviate dagli altri.
    Mi serve interrogare il DB in modo da ottenere le foto inviate dagli utenti che non hanno ancora votato. Due sono le tabelle coinvolte: FOTO e VOTI. In foto ho tra gli altri campi l'id dell'autore e del contest a cui partecipa (sono chiave esterne per altre tabelle ovviamente), mentre in VOTI ho l'id dell'utente votante e del concorso in cui ha votato.

    La cosa più immediata che mi è venuta in mente è una cosa del genere:
    (SELECT * FROM foto WHERE contest = x) - (SELECT foto.* FROM foto JOIN voti ON foto.autore = voti.utente WHERE contest = x)
    Cioè, prendere tutte le foto del concorso e sottrarci le foto foto di chi ha votato. In SQL però non riesco a eseguire la sottrazione, non so neanche se sia possibile.

    Quindi chiedo. E' possibile in SQL eseguire sottrazioni tra tabelle (nella teoria relazione sono contemplate)? Oppure c'è un modo migliore di ottenere ciò che voglio???

    Grazie.

  2. #2
    Posta la struttura delle tabelle con le relazioni...
    Ciao!

  3. #3
    Utente di HTML.it L'avatar di JoeP
    Registrato dal
    May 2004
    Messaggi
    558
    Credevo fosse chiaro lo schema... E' molto semplice:

    FOTO (id, titolo, data, idAutore, idConcorso)
    L'utente idAutore ha inviato la foto id per il concorso idConcorso.

    VOTI (id, idConcorso, idUtente, idFoto)
    L'utente idUtente ha votato la foto idFoto per il concorso idConcorso.

    Le altre due tabelle, UTENTI e CONCORSI non riguardano il problema che ho posto.

    Sottrazioni niente in MySQL allora?

  4. #4
    Non capisco, mi puoi spiegare quali sono le foto che vuoi escludere, ma con una query...
    Ciao!

  5. #5
    Utente di HTML.it L'avatar di JoeP
    Registrato dal
    May 2004
    Messaggi
    558
    Voglio SELEZIONARE con una query le foto di un corcorso il cui autore non è un utente che ha votato per quel concorso.

    In pratica da questo insieme:
    SELECT * FROM foto WHERE idConcorso = x

    Voglio togliere (sottrare) questo:
    SELECT foto.* FROM foto INNER JOIN voti ON foto.idAutore = voti.idUtente WHERE idConcorso = x

  6. #6
    Originariamente inviato da JoeP
    Voglio SELEZIONARE con una query le foto di un corcorso il cui autore non è un utente che ha votato per quel concorso.

    In pratica da questo insieme:
    SELECT * FROM foto WHERE idConcorso = x

    Voglio togliere (sottrare) questo:
    SELECT foto.* FROM foto INNER JOIN voti ON foto.idAutore = voti.idUtente WHERE idConcorso = x
    prova con IS NULL:
    codice:
    SELECT * 
    FROM foto 
    LEFT JOIN voti ON foto.idAutore = voti.idUtente 
    WHERE idConcorso = x
    AND voti.id_utente IS NULL

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it L'avatar di JoeP
    Registrato dal
    May 2004
    Messaggi
    558
    Perfetto! Grazie mille Piero, davvero non ci saltavo proprio fuori...

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.