Heim  >  Artikel  >  Datenbank  >  Kann ich Tabellen in MySQL basierend auf durch Semikolons getrennten Werten verknüpfen?

Kann ich Tabellen in MySQL basierend auf durch Semikolons getrennten Werten verknüpfen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-01 00:03:28941Durchsuche

Can I Join Tables in MySQL Based on Values Separated by Semicolons?

Kann ich das mit reinem MySQL lösen? (Verknüpfen von durch „;“ getrennten Werten in einer Spalte)

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:

  1. Erstellen Sie eine Tabelle mit dem Namen „Integerseries“, die die Zahlen von 1 bis zur maximalen Anzahl von Elementen in der durch Trennzeichen getrennten Zeichenfolge enthält.
  2. Verwenden Sie COUNT_IN_SET und VALUE_IN_SET Funktionen, um die Anzahl der Elemente in der durch Trennzeichen getrennten Zeichenfolge zu zählen und jedes Element basierend auf seiner Position zu extrahieren.
  3. Verbinden Sie die Tabelle „user_resource“ mit der Tabelle „Integerseries“ mithilfe eines Cross-Joins. Dadurch werden Zeilen für jedes Element in der durch Trennzeichen getrennten Zeichenfolge generiert.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn