Heim  >  Artikel  >  Datenbank  >  Wie verbinde ich Daten aus mehreren Tabellen mit getrennten Werten in MySQL, ohne Tabellen zu verknüpfen?

Wie verbinde ich Daten aus mehreren Tabellen mit getrennten Werten in MySQL, ohne Tabellen zu verknüpfen?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-01 09:31:30880Durchsuche

How to Join Data from Multiple Tables with Delimited Values in MySQL Without Linking Tables?

Verknüpfen von Daten aus mehreren Tabellen mithilfe begrenzter Werte in MySQL

Frage:

Wie kann Ich rufe effizient Daten aus mehreren Tabellen ab, die in einer der Spalten durch Semikolons getrennte Werte haben, ohne externe Sprachen zu verwenden oder eine Verknüpfungstabelle einzuführen?

Antwort:

An Um dieses Problem zu lösen, können wir eine Technik verwenden, die die durch Semikolons getrennten Werte in einzelne Zeilen umwandelt. Dadurch können wir die Tabellen verknüpfen und das gewünschte Ergebnis erzielen.

Lösung:

Die bereitgestellte Lösung verwendet zwei benutzerdefinierte MySQL-Funktionen:

  • COUNT_IN_SET(haystack, delim): Gibt die Anzahl der durch Zeichen getrennten Elemente in einer bestimmten Zeichenfolge zurück.
  • VALUE_IN_SET(haystack, delim, which): Behandelt die getrennte Liste als Array und ruft den Wert an einem angegebenen Index ab (welcher).

Diese Funktionen werden mit einem Join zwischen den Benutzer- und Ressourcentabellen kombiniert, wobei die Integerseries-Tabelle zum Durchlaufen des Semikolons verwendet wird. getrennte Werte:

<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, ';') /* normalize */

     JOIN resource 
       ON resource.id = VALUE_IN_SET(user_resource.resources, ';', isequence.id)      
ORDER BY
       user_resource.user,  resource.data</code>

Diese Abfrage führt zu einer Tabelle, in der die Ressourcen jedes Benutzers als einzelne Zeilen dargestellt werden, sodass wir problemlos mit der Ressourcentabelle verknüpfen können, um die entsprechenden Daten zu erhalten.

Zusätzliche Informationen:

  • Die Integerseries-Tabelle enthält eine Folge von Werten, die zur Normalisierung der durch Trennzeichen getrennten Listen verwendet werden.
  • Die Funktionen COUNT_IN_SET und VALUE_IN_SET können in anderen Szenarien wiederverwendet werden, in denen Es müssen getrennte Listen verarbeitet werden.
  • Für SQLite-Datenbanken ist eine ähnliche Lösung verfügbar: https://stackoverflow.com/a/24750820/302036

Das obige ist der detaillierte Inhalt vonWie verbinde ich Daten aus mehreren Tabellen mit getrennten Werten in MySQL, ohne Tabellen zu 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