Kann ich das mit reinem MySQL lösen? (Verknüpfen von durch „;“ getrennten Werten in einer Spalte)
Diese Frage stellt sich, wenn Sie Daten über mehrere Tabellen verteilt haben und diese in einer einzigen Abfrage abrufen müssen, ohne externe Sprachen wie PHP zu verwenden. Die Daten werden denormalisiert gespeichert, wobei mehrere Werte in einer einzelnen Spalte durch Semikolons (;) getrennt sind.
Problembeschreibung:
In diesem Fall die user_resource Die Tabelle verfügt über eine Ressourcenspalte, die eine Liste von Ressourcen-IDs enthält, die durch Semikolons getrennt sind:
user | resources |
---|---|
user1 | 1;2;4 |
user2 | 2 |
user3 | 3;4 |
Gewünschtes Ergebnis:
Das gewünschte Ergebnis besteht darin, eine Tabelle mit Listen zu erhalten Jeder Benutzer und die entsprechenden Ressourcen:
user | data |
---|---|
user1 | data1 |
user1 | data2 |
user1 | data4 |
user2 | data2 |
Lösung:
Die Lösung besteht darin, eine „normalisierte“ Tabelle aus der Tabelle „user_resource“ zu erstellen und die Liste der Ressourcen-IDs zu behandeln als Zeilen und Verknüpfen der normalisierten Tabelle mit der Ressourcentabelle. Diese „Normalisierung“ wird durch eine Kombination der Funktionen COUNT_IN_SET und VALUE_IN_SET erreicht.
Normalisierte Tabelle:
Die generierte „normalisierte“ Tabelle ähnelt der folgenden:
user | resources | resources_index | resources_value |
---|---|---|---|
sampleuser | 1;2;3 | 1 | 1 |
sampleuser | 1;2;3 | 2 | 2 |
sampleuser | 1;2;3 | 3 | 3 |
stacky | 2 | 1 | 2 |
testuser | 1;3 | 1 | 1 |
testuser | 1;3 | 2 | 3 |
Abschließende Abfrage:
<code class="sql">SELECT user_resource.user, resource.data FROM user_resource JOIN integerseries AS isequence ON isequence.id <= COUNT_IN_SET(user_resource.resources, ';') JOIN resource ON resource.id = VALUE_IN_SET(user_resource.resources, ';', isequence.id) ORDER BY user_resource.user, resource.data</code>
Verwendete Funktionen:
Die Funktionen COUNT_IN_SET und VALUE_IN_SET werden wie folgt verwendet:
Zusätzliche Informationen:
Das obige ist der detaillierte Inhalt vonKann ich durch \';\' getrennte Werte in einer MySQL-Spalte verknüpfen, ohne externe Sprachen zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!