2016-11-18 3 views
1

Dies sind meine Tabellen/Einheiten:Wie erhält man alle Spalten von Tabelle1 und alle Zeilen von Tabelle2, die zu Tabelle1 gehören?

articles 
- id 
- title 
- body 

keywords 
- id 
- fk_article_id 
- title 

Ein Artikel mehrere Keywords haben kann (one to many Beziehung, nicht viele zu viele). Es kann 1, 2, 3, 4, 5, 6, 7, 8, 9, ... Schlüsselwörter geben, die zu einem Artikel gehören.

Was ist der beste Weg, den Titel und Körper für 1 Artikel und Titel aller Schlüsselwörter zu wählen?

Ergebnis Beispiel:

- article.title 
- article.body 
-- keyword1.title 
-- keyword2.title 
-- keyword3.title 

Wenn ich ein INNER JOIN tun, dann bekomme ich den gleichen Artikel Titel und Körper zweimal. Kann dies mit einer GROUP BY erfolgen oder soll ich NESTED-Anweisungen verwenden?

Die INNER JOIN, das habe ich versucht, aber es ist offensichtlich nicht die richtige Lösung:

SELECT articles.title, articles.body, keywords.title 
FROM articles 
INNER JOIN keywords 
ON articles.id = keywords.fk_article_id 
WHERE articles.id = 1 
+3

Geben Sie Beispieldaten, das Ergebnis erhalten Sie und das erwartete Ergebnis. – Viki888

+1

Gibt es immer drei Keyword-Titel pro Artikeltitel? –

+0

Stellen Sie Beispieldaten und die von Ihnen versuchte Abfrage sowie eine psudo-Abfrage bereit, die Sie ausführen möchten. Ich helfe einem faulen Helfer wie mir, die Frage zu beantworten. – Aus

Antwort

2

Für Probe: Angenommen, Sie

articles 
id | title | body 
---- ----- ----- 
1 | Harry Potter | text 
2 | LOTR | text text 

keywords 
id | title 
---- ----- 
1 | magic 
1 | stick 
2 | dwarf 
2 | ring 

haben Wenn Sie die unten Abfrage

Select a.title,a.body,group_concat(k.title) from articles a JOIN keywords k ON a.id=k.id group by a.id 
ausführen

Es wird zurückgegeben Harry Potter, (Magie, Stock) LOTR, (Zwerg, Ring)

+0

Wenn dies Ihre Frage nicht beantwortet, sollten Sie vielleicht Ihre Frage neu formulieren. – CFreitas

+0

Wie würde die Abfrage ohne die group_concat() aussehen? Ist das überhaupt möglich? So dass ein Array von Schlüsselwörtern anstelle einer Zeichenfolge zurückgegeben würde? –

+1

@JoSmo: Ohne group_concat() Abfrage wird das einzelne Feld jeder Gruppe & Sie können nicht direkt das Array aber in Ihrem Server-Side-Skript, können Sie Comman separeded String zu Array sehr leicht in PHP konvertieren Sie haben [implode] (http://php.net/manual/en/function.implode.php) –

Verwandte Themen