2017-03-11 1 views
0

Ich habe die folgenden zwei SQL-Tabellen (in MySQL) bekam:Sql weitere Tabellen mit demselben Wert finden und fügen Sie ihre ID in Ausgabe

Posts Tables 
+----+---------------+--------+----------+ 
| id | title   | slug | language | 
+----+---------------+--------+----------+ 
| 1 | Post title | slug_1 | eng  | 
| 2 | Another title | slug_2 | eng  | 
| 3 | Title German | slug_1 | ger  | 
| 4 | Again German | slug_3 | ger  | 
| 5 | Russian title | slug_1 | rus  | 
+----+---------------+--------+----------+ 

In Ausgang muss ich bin Liste aller Beiträge erhalten und in die gleiche Zeile von Array die Informationen von anderen Posts (ID), wo Slug ist gleich. So etwas wie dieses

+----+------------+--------+----------+--------------+---------------+ 
| id | title  | slug | language | german trans | russian trans | 
+----+------------+--------+----------+--------------+---------------+ 
| 1 | Post title | slug_1 | eng  | 3   | 5 
| 2 | Another ti | slug_2 | eng  | null   | null 
| 4 | German tit | slug_3 | null | 4   | null 

Zuerst habe ich beschlossen, diese sortier zu tun, nachdem die Liste der Beiträge mit foreach-Schleife bekommen, aber es dauert eine wirklich große Ressource, wenn die Liste der Beiträge groß ist. also denke ich in sql wird es viel schneller sein, aber ich weiß nicht, dass ich das tue.

+1

"zwei Tabellen"? Deine Frage hat nur eine Frage. Warum ist die Sprache für "4" 'NULL' anstelle von' 'ger''? –

+0

Da könnte es einen Beitrag geben, der nicht in der Muttersprache der Website existiert, der Englisch ist, aber in Deutsch existiert. Und es ist nicht notwendig, diesen Beitrag auf Englisch anzuzeigen. –

Antwort

0

Sie scheinen den ersten Beitrag mit Informationen zu Übersetzungen zu haben. Wenn Sie die Sprachen kennen, dann tut dies wahrscheinlich, was Sie wollen:

select s.minid, 
     max(case when p.id = s.minid then title end) as title, 
     s.slug, 
     max(case when p.id = s.minid then language end) as language, 
     max(case when p.lang = 'ger' then id end) as German, 
     max(case when p.lang = 'rus' then id end) as Russian 
from posts p join 
    (select slug, min(id) as minid 
     from posts p 
     group by slug 
    ) s 
    on p.slug = s.slug 
group by p.slug; 
+0

Vielen Dank. Das funktioniert gut. –

Verwandte Themen