2016-04-19 4 views
0

Ich habe eine Tabelle, die eine Liste von Personen mit folgenden fileds hat:MySQL erstellen eine Reihe von zwei oder mehr Result

persons (id, identity, name, surname) 

Und dann gibt es eine zweite Tabelle mit den folgenden Feldern:

identities (id, type) 

Die Werte für das Feld identities.type können Sexualität oder Zugehörigkeit in Bezug darauf sein, ob eine Person ein traditioneller Heiler ist oder nicht.

Wir haben eine dritte Tabelle, wo wir Personen Identität Präferenzen haben und unten ist die Abbildung:

preferences (id, person_id, identity_id, value) 

Sagen Sie zum Beispiel ich als Hetero Typ identifizieren und zu einem traditionellen Heiler und dann Person 2 identifiziert als nur homosexuell.

Im Folgenden finden Sie eine Darstellung des obigen Szenarios:

enter image description here

Wenn ich die zweite Reihe beseitigen will und das zweite Wertefeld für den ersten Benutzer in der ersten Zeile hinzufügen, ist es möglich?

Antwort

1

Ein bisschen schwierig, ohne die Tabellen separat zu sehen, aber das ist meine Schätzung basierend auf Ihrer Beschreibung. Geht das in die richtige Richtung?

SELECT 
p.id, p.name, p.surname, pref.id, pref.person_id, 
CASE WHEN i.type = 'sexuality' THEN p.value ELSE NULL END AS sexuality, 
CASE WHEN i.type = 'affiliation' THEN p.value ELSE NULL END AS affiliation 
FROM persons p 
JOIN preferences pref ON p.id = pref.person_id 
JOIN identities i ON i.id = pref.identity_id 
+0

Dies kam wirklich nah an der Lösung, außer ich bin immer noch mit Duplikate auf meinem Ergebnissatz. Ich denke, Sie haben viel dazu beigetragen, zu verstehen, wie ich damit umgehen kann und die Ehrungen sind an mir, um es richtig zu machen. Ich denke jedoch daran, eine "IF" -Anweisung zu verwenden, um die Duplikate loszuwerden, aber es scheint keine praktikable Lösung zu sein. Würdest du vielleicht einen Trick vorschlagen, mit dem ich das schaffen könnte? Deine Lösung war sehr hilfreich. – Maximum86

+0

dann müssen Sie es vielleicht mit einer Unterabfrage tun – siax

+0

Ist es sicher anzunehmen, dass pro Person gibt es eine Sexualität und eine Zugehörigkeit? Wenn ja, könnte dies für Sie arbeiten: 'SELECT p.id, p.name, p.nachname, pref.id, pref.person_id, (SELECT Wert FROM Präferenzen Pref JOIN Identitäten i ON i.id = Pref .identity_id WHERE person_id = p.id UND i.type = 'sexuality' LIMIT 1) AS sexuality, (SELECT Wert FROM Präferenzen pref JOIN Identitäten i ON i.id = Präf.identität_ID WHERE person_id = p.id UND i.type = 'Zugehörigkeit' LIMIT 1) AS Zugehörigkeit VON Personen p' – siax

0

In der Personen- und Identitätstabelle müssen Sie jeden Datensatz nur einmal eingeben. In der Voreinstellungstabelle können Sie eine beliebige Kombination der beiden vorherigen Tabellen beliebig oft einfügen. Dann müssen Sie eine Select-Anweisung mit Joins schreiben, um eine Tabelle wie im Bild anzuzeigen:

SELECT * FROM preferences p 
INNER JOIN persons u on u.id = p.person_id 
INNER JOIN identities i on i.id = p.identity_id 
Verwandte Themen