• User Newbie

    Assegnare più righe di una tabella ad una singola di un'altra

    Salve ragazzi! Mi sto approcciando a MySQL e PHP e fin'ora, con un po' d'ingegno e un po' di google, mi sta riuscendo tutto.
    Ultimamente sono però stato ostacolato da un dubbio che non so come sciogliere. Vado dritto al punto:
    Ho creato due tabelle: utenti, con l'elenco degli utenti iscritti al sito, e series, con un elenco di serie a fumetti.
    Quello che vorrei fare è far scegliere agli utenti per ogni serie un valore che si associa allo "stato di lettura". Mi spiego per bene
    Per ogni serie, vorrei che l'utente possa scegliere se (ad esempio) non l'ha letta, l'ha letta, l'ha conclusa o l'ha interrotta.
    E quindi, mi preoccupava come farlo in MySQL. Pensavo di fare una terza tabella con righe pari al numero di utenti e colonne pari a quello delle serie, associare tutto tramite ID e inserire nel campo un valore. (Es: 1: l'ha letta, 2: letta, 3: conclusa, 4: interrotta) però avevo qualche dubbio in merito.

    Domanda extra (spero mi sia concessa 😄 )
    Ovviamente, ogni utente e ogni serie è associato ad un id. Ma se rimuovessi un utente/una serie e ne aggiungessi uno nuovo, lasciando vuoto il campo id, andrebbe ad inserirsi nell'id successivo all'ultimo. C'è un modo per forzarlo a inserirsi nel primo id disponibile?
    Anche per questo avevo qualche dubbio sul creare una tabella extra.

    Grazie in anticipo 🙂


  • User Attivo

    Ciao Fork e benvenuto nel ForumGT!
    Secondo me sei sulla strada giusta poiché una terza tabella ti serve per forza. Il problema è che se tu rimuoverai un'utente perderai tutte le info relative all'utente stesso (quindi quali serie ha letto e le sue preferenze) se per te non è un problema rimuovilo pure.
    Se hai inserito il campo id come autoincrement questo andrà al successivo all'ultimo come hai detto tu. Per evitare una cosa del genere devi togliere l'autoincrement ed implementare una serie di controlli che ti permettano di incrementare in modo intelligente l'id ed eventualmente "tappare" i buchi.


  • User Newbie

    Grazie!
    @PietroR said:

    Secondo me sei sulla strada giusta poiché una terza tabella ti serve per forza.
    Immaginavo. C'è per caso un modo per fare che sia automatizzata o comunque devo aggiungere manualmente ogni volta che aggiungo un utente/una serie?
    @PietroR said:

    Il problema è che se tu rimuoverai un'utente perderai tutte le info relative all'utente stesso (quindi quali serie ha letto e le sue preferenze) se per te non è un problema rimuovilo pure.
    Beh, se un utente cancella il suo account, non dovrebbe aver cura dei suoi dati.
    @PietroR said:

    Se hai inserito il campo id come autoincrement questo andrà al successivo all'ultimo come hai detto tu. Per evitare una cosa del genere devi togliere l'autoincrement ed implementare una serie di controlli che ti permettano di incrementare in modo intelligente l'id ed eventualmente "tappare" i buchi.
    Capisco. Va beh, ho già in mente una soluzione per questo


  • User Attivo

    Potresti fare un controllo al salvataggio, effettuando una select sull'id dell'utente.
    Se la query torna la riga vuol dire che è già presente, se torna un set vuoto l'id non c'è nella tabella e lo aggiungi con una insert.


  • User Newbie

    Pensavo di fare così allora:
    Una tabella (reading) dove le righe corrispondono alle serie e le colonne agli utenti.
    Se si cancella una serie o un utente, si rimuove da entrambe le tabelle.
    Quando invece viene inserita una serie (o un utente), si aggiunge una riga (o una colonna) con tutti i valori impostati a zero.
    Dici che può funzionare?


  • User Attivo

    Beh a logica direi di si!