2017-02-21 3 views
-1

Ich habe zwei Tabellen in meiner Datenbank, ist articles und das andere ist articleMedia die article Tabelle speichert den Titel und Körper, während die articleMedia speichert Anhänge, jeder Artikel beliebig viele Anhänge haben kann, die articleMedia Tabelle beziehen mit der articles Tabelle einen Fremdschlüssel, die sich den Artikel anzu von id ist, so meine Tabellenstruktur wieMySQL schließt sich

Artikel sieht Tisch

---------------------------------- 
|id |title | body    | 
---------------------------------- 
|1 |houses|some houses are green| 

ArticleMedia Tisch

---------------------------------- 
|id |articleFk | path    | 
---------------------------------- 
|1 |2   |/media/1.jpg  | 
|2 |2   |/media/house.mp4 | 

meiner Anfrage Fähigkeiten sind nicht so gut, so meine Frage

SELECT 
    article_tbl.id, title,body, articleMedia_tbl.path 
FROM `article_tbl` 
JOIN articleMedia_tbl ON article_tbl.id = articleMedia_tbl.articleFk 

ist die

so etwas wie gibt
------------------------------------------------------ 
|id | title | body | path   |     | 
------------------------------------------------------ 
|1 |houses|some houses are green |/media/1.jpg  | 
------------------------------------------------------ 
|2 |houses|some houses are green |/media/house.mp4 | 

ist es eine Möglichkeit, die Vervielfältigung oder was besserer Ansatz zu vermeiden, kann ich All dies zu vermeiden?

+1

Soweit eine SQL-Ergebnismenge betrifft, so ist das nicht Vervielfältigung. Wie möchten Sie das Ergebnis strukturieren? Bitte veröffentlichen Sie ein Beispiel für die Ausgabe, die Sie erreichen möchten. In der Regel ist es erforderlich, einen Anwendungscode zu verwenden, um ein SQL-Ergebnis zu einer anderen als einer 2D-Struktur von Spalten/Zeilen neu zu formatieren. –

+0

Was genau versuchen Sie von Ihrer Anfrage zu bekommen? Es wird nicht dupliziert, da Pfad eindeutige Werte sind. – r0xette

+0

Ich versuche nicht, etwas Besonderes zu bekommen, aber meine Sorge ist, gibt es einen besseren Weg, um die Anhänge zu bekommen, als diese Art von Duplikation zu haben, wo Titel und Körper dupliziert werden? – Chrome

Antwort

0

Worauf verweisen Sie auf duplicationale? Sie scheinen eine 1: N-Beziehung zu haben, in der Artikel eine beliebige Anzahl von Medien enthalten können. Indem Sie Artikel mit Medien verbinden, verknüpfen Sie die beiden , wo sie entsprechen. Für jedes fk in der Medien-Tabelle haben Sie eine Übereinstimmung in der Artikeltabelle, daher die Duplizierung; Ihre Abfrage macht genau das, was Sie wollen. Sie können die Duplizierung ausblenden, indem Sie Ihre Projektion (ausgewählte Spalten) nur mit denen ändern, die Sie sehen möchten.

Was ich denke Sie berühren ist die interessantere Gefahr von JOINS, das ist ein Cross-Join. Im Kern repräsentiert ein Join das kartesische Produkt zweier Tabellen. Wir verbinden nur höchstens eine 1: N-Beziehung, weil wir die Notwendigkeit der Datenduplizierung von der 1-Seite akzeptieren können. Wenn wir N: N beitreten würden, würden wir jede Kombination zwischen den beiden erhalten (z. B. A: A, A: B, B: A, B: B usw.). Dies kann mit einer assoziativen Entität gelöst werden.

Um klar zu sein, müssen Sie nicht ein kartesische hier kommen, fand ich aber dies hilfreich in meinem Verständnis des Joins:

http://www.databasejournal.com/features/mysql/article.php/3901221/Identifying-and-Eliminating-the-Dreaded-Cartesian-Product.htm

Verwandte Themen