Frage:
Ich habe Daten in mehreren Tabellen, die ich basierend auf „;“ verknüpfen muss. (Semikolon) getrennte Werte in einer Spalte. Ich kann PHP oder eine andere Sprache nicht verwenden, um die Ergebnisse zu manipulieren. Gibt es eine Möglichkeit, dies nur mit MySQL zu erreichen?
Antwort:
Ja, es ist möglich, auf „;“ beizutreten. getrennte Werte in einer Spalte mit reinem MySQL. Nachfolgend finden Sie eine detaillierte Erklärung der Lösung:
Konvertieren der durch Trennzeichen getrennten Zeichenfolge in Zeilen
Der Schlüssel besteht darin, das „;“ zu konvertieren. durch Trennzeichen getrennte Zeichenfolge in eine Reihe von Zeilen. Dies kann mit den folgenden Schritten erreicht werden:
Abfrage zur Normalisierung der User_resource-Tabelle
<code class="sql">SELECT user_resource.user, user_resource.resources, COUNT_IN_SET(user_resource.resources, ';') AS resources_count, isequence.id AS resources_index, VALUE_IN_SET(user_resource.resources, ';', isequence.id) AS resources_value FROM user_resource JOIN integerseries AS isequence ON isequence.id <= COUNT_IN_SET(user_resource.resources, ';') ORDER BY user_resource.user, isequence.id</code>
Verknüpfen der normalisierten Tabelle mit die Ressourcentabelle
Sobald die user_resource-Tabelle normalisiert ist, kann sie mit der Ressourcentabelle verknüpft werden, um das gewünschte Ergebnis zu erhalten.
<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>
Beispieleingabe und -ausgabe
user_resource Table:
user | resources |
---|---|
user1 | 1;2;4 |
user2 | 2 |
user3 | 3;4 |
resource Table:
id | data |
---|---|
1 | data1 |
2 | data2 |
3 | data3 |
4 | data4 |
5 | data5 |
Normalizeduser_resource Table:
user | resources | resources_count | resources_index | resources_value |
---|---|---|---|---|
user1 | 1;2;4 | 3 | 1 | 1 |
user1 | 1;2;4 | 3 | 2 | 2 |
user1 | 1;2;4 | 3 | 3 | 4 |
user2 | 2 | 1 | 1 | 2 |
user3 | 3;4 | 2 | 1 | 3 |
user3 | 3;4 | 2 | 2 | 4 |
Ausgabe (verknüpftes Ergebnis):
user | data |
---|---|
user1 | data1 |
user1 | data2 |
user1 | data4 |
user2 | data2 |
Das obige ist der detaillierte Inhalt vonKann ich Tabellen in MySQL basierend auf durch Semikolons getrennten Werten verknüpfen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!