2016-12-03 4 views
0

In erster Linie möchte ich sagen, dass ich an dieser Stelle keinen Code habe, um dies zu unterstützen. Ich versuche eine Idee zu konzipieren. Also, Entschuldigung im Voraus.Auswählen/Gruppieren von MySqli-Daten über Joins

Grundlegende Zusammenfassung. Ich habe eine Datenbank voller Shows, die jeweils mehrere Genres haben können, wie Show A kann eine Aktion, Abenteuer, Drama sein. Typisch, oder? Gerade jetzt, da ich meine Datenbank so eingerichtet habe, dass sie Spalten wie genre_1, genre_2, genre_3 hat. Das ist furchtbar, ich weiß, weshalb ich es neu tue.

Ich möchte eine Tabelle voller Genres erstellen, dann eine Tabelle mit der Show-Informationen, dann haben Sie eine Tabelle, um diese beiden zu beziehen. Die Primärtasten in den Genre- und Show-Tabellen wären also Fremdschlüssel in der Genre-Show-Tabelle.

Ich bin mir ziemlich sicher, dass dies der beste Weg ist, über diese Eins-zu-viele-Beziehung zu gehen, aber lassen Sie mich wissen, ob etwas fehlt.

Mein Problem ist, ich bin unsicher, wie ich, zum Beispiel, alle Shows, die in der Action OR Abenteuer Genres sind, oder liste alle Shows, die in Aktion und Abenteuer Genres sind auflisten.

Ich bin ziemlich, irgendwie vertraut mit Joins, aber nach meinem Wissen kann ich nicht herausfinden, wie ich das abfragen würde.

Letztlich, was ich zu tun bin, ist in der Lage, meine DB zu fragen und sagen "Gib mir jede Show, die Action-und Abenteuer-Genres hat" und dann auf meinem Weg.

Ich hoffe, das macht Sinn. Vielen Dank im Voraus für Ihre Zeit/Antworten, ich schätze es wirklich.

Antwort

0

One zu viele 101:

Haupt Tabelle:

id (primary key, auto_increment), 
name, 
datecreated (datetimestamp), 
dateupdated (datetimestamp) 

Viele-zu-Eins-A

id (primary key, auto_increment), 
main_id (foreign key) 
name, 
datecreated (datetimestamp), 
dateupdated (datetimestamp) 

Viele-zu-Eins-B

id (primary key, auto_increment), 
main_id (foreign key) 
name, 
datecreated (datetimestamp), 
dateupdated (datetimestamp) 

Jetzt Sie können so viele Many-to-One-Tische zusammenfügen, wie Sie brauchen thusly D:

select 
    * 
from 
    main left join 
    table_a on main.id = table_a.main_id left join 
    table_b on main.id = table_b.main_id 
where 
    main.id = X 

Sie werden viele Zeilen zurückerhalten, aber jede Zeile wird Duplikate des Hauptobjekts, sondern umfassen alle many-to-one. Dies wird Denormalization genannt.

Oder bevorzugen Sie Unterschleifen, wobei Sie eine Abfrage ausführen, um Ihre Hauptobjekte zu erhalten, und dann innerhalb eines Subloops für jede Viele-zu-Eins, verwenden Sie die main.id Zeilen main_id.id Zeilen, die Ihr Objekt entsprechen.