Visualizzazione di dati normalizzati

Domanda successiva da: aggiunta di sum da 2 tabelle diverse

Ho creato 3 tabelle: videos members video_member

Il terzo viene utilizzato per 'colbind' i primi 2 tavoli, in quanto un membro può appartenere a molti video e un video può avere molti membri.

inserisci la descrizione dell'immagine qui

Avevo solo una colonna dei members nella tabella dei video e inserivo i membri in quel modo:

 video_id | members 1 | Tom,Dan 2 | Casey,Zack,Bob 3 | Tom,Casey,Dan,Zack 4 | Zack,Bob,Dan 

Nel mio progetto PHP interrogherei i dati dalla tabella dei video e, utilizzando il motore dei templates di Twig, utilizzerei un ciclo for per esaminare each row e creare una pagina simile a una galleria. Ogni 'box' con una miniatura e sotto di essa i dati della tabella dei video.

Avevo bisogno di visualizzare i membri individualmente in modo che ognuno avesse il proprio link. Quindi vorrei dividere la string con virgole. (es: Casey, Zack, Bob) in un arrays quindi lo ha semplicemente fatto.

Con il mio nuovo formato nell'image che ho postato, come potrei fare per mostrare i membri?

Quello che ho fatto: questo è quello che ho nel mio video.php

 $sql = 'SELECT * FROM videos'; $sql2 = 'select v.video_id "v_id", m.name "name" from videos v, video_member b, members m where b.video_id = v.video_id and b.member_id = m.member_id'; $result = $mysqli->query($sql); $result2 = $mysqli->query($sql2); echo $twig->render('video.html', arrays('videos'=> $result, 'members' => $result2)); 

Quindi utilizzo il primo risultato per generare i dati dalla tabella dei video nel mio video.html

 {% for v in videos %} *html layout* {% endfor %} 

dal momento che ho un ciclo for che passa attraverso each row dai video, ho aggiunto questo all'interno del ciclo

 {% for m in members %} {% if v.video_id == m.v_id %} <a href='{{memberurl}}/{{m.name}}/'>{{m.name}}</a> {% endif %} {% endfor %} 

Quindi l'idea è: each volta che scorre una row dai videos , controlla video_id e v_id(fk) nella nuova tabella creata con my $ sql2 e se ci sono corrispondenze mostrerà quelle di "nome".

$ Sql2: inserisci la descrizione dell'immagine qui

In questo momento sta funzionando in questo modo, ho solo bisogno di implementare le virgole al momento ma …

Sto principalmente imparando a creare e utilizzare dati normalizzati e ho voluto sapere se sono sulla strada giusta perché voglio implementarlo con tag e articoli futuri. È questo il modo corretto / migliore per visualizzare i membri?

Sono nuovo a molto di questo e each volta che imparo qualcosa di nuovo mi sento benissimo, grazie per qualsiasi aiuto!

video.html inserisci la descrizione dell'immagine qui

Nella maggior parte dei casi, si restituiscono tutti i dati che si desidera in una singola query e si inseriscono nella pagina.

Ad esempio, puoi eseguire una singola query in questo modo: $sql2 = 'select * from videos v, video_member b, members m where b.video_id = v.video_id and b.member_id = m.member_id'; e quindi nel tuo codice di front-end includi la logica quando l'ID video cambia per disegnare la tua prossima casella video.

Quello che stai facendo è unire i due dataset nel tuo model; questo è inefficiente, specialmente se hai domande complesse o quando hai un filter (ad esempio "videoName come 'Ferris%').