• User Attivo

    PHP MySQL voti comparativi univoci

    Spero di aver capito... vediamo.

    Tabellautenti:
    ID|Name
    1|Gino
    2|Pino
    
    TabellaElementi:
    ID|Elemento
    1|Primo
    2|Secondo
    3|Terzo
    4|Quarto
    5|Quinto
    6|Sesto
    
    TabellaArchivio
    ID|IDUtente|Selezione|NonSelezione
    1|2|3|5
    2|2|1|4
    

    Nell'esempio ho registrato due risposte di "Pino" ed in particolare tra "Terzo" e "Quinto" ha scelto "Terzo", mentre tra "Primo" e "Quarto" ha scelto "Primo".
    Se ho compreso giusto al terzo quesito il sistema dovrà proporre solo "Secondo" e "Sesto".

    Quindi, registro nelle risposte sia la scelta che l'opzione scartata e quando devo proporre una domanda nuova selezionerò in maniera casuale due opzioni escludendo le opzioni in qui ho l'utente selezionato e le risposte già presenti

    select id, elemento from TabellaElementi WHERE id NOT IN (SELECT Selezione FROM TabellaArchivio where idUtente = " & idUtente & ") and id NOT IN (SELECT NonSelezione FROM TabellaArchivio where idUtente = " & idUtente & ") order by rand() limit 0,2
    

    Esistono poi alternative... magari leggiti questo articolo che esegue dei test su differenti query per valutare le performance
    https://www.red-gate.com/hub/product-learning/sql-prompt/consider-using-not-exists-instead-not-subquery


  • User Attivo

    Ah, ok, non devi escludere la domanda se è già stata fatta ma solo l'abbinamento...

    Pensando così al volo:

    1. Fatti una tabella con i possibili abbinamenti
    2. Registri l'abbinamento con l'utente

    Fine della storia


  • User Attivo

    Select "abbinamento" from abbinamenti dove non esiste abbinamento ed utente in risposte....
    non devi fare cicli