Heim > Datenbank > MySQL-Tutorial > Hauptteil

Kann ich durch \';\' getrennte Werte in einer MySQL-Spalte verknüpfen, ohne externe Sprachen zu verwenden?

Susan Sarandon
Freigeben: 2024-10-31 12:56:02
Original
724 Leute haben es durchsucht

Can I Join on ';' Separated Values in a MySQL Column Without Using External Languages?

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>
Nach dem Login kopieren

Verwendete Funktionen:

Die Funktionen COUNT_IN_SET und VALUE_IN_SET werden wie folgt verwendet:

  • COUNT_IN_SET: Gibt die Anzahl der durch Zeichen getrennten Elemente in einer bestimmten Spalte zurück.
  • VALUE_IN_SET: Behandelt die durch Trennzeichen getrennte Liste als Einsbasiertes Array und gibt den Wert an einem bestimmten „Index“ zurück.

Zusätzliche Informationen:

  • Die Integerseries-Tabelle ist eine Tabelle, die enthält die Zahlen von 1 bis zu einem bestimmten Grenzwert, die zum Generieren der „normalisierten“ Zeilen verwendet werden.
  • Diese Lösung bietet einen generischen Ansatz für den Umgang mit durch Trennzeichen getrennten Listenelementen in einer MySQL-Spalte, nicht nur im Kontext des bereitgestellten spezifischen Beispiels .

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!