Heim > Datenbank > MySQL-Tutorial > So implementieren Sie eine mehrspaltige Spleißabfrage in MySQL-Abfrageergebnissen

So implementieren Sie eine mehrspaltige Spleißabfrage in MySQL-Abfrageergebnissen

王林
Freigeben: 2023-06-01 23:40:05
nach vorne
2686 Leute haben es durchsucht

Ich bin bereits auf ein Problem gestoßen. Es gibt zwei Tabellen in der MySQL-Datenbank, in denen Standortinformationen wie Provinzen und Städte gespeichert sind, und die andere Benutzertabelle enthält drei Felder, die den drei Standortinformationen in der Adresstabelle entsprechen (sehr seltsame Tabelle). Format), wie in der Abbildung gezeigt:

So implementieren Sie eine mehrspaltige Spleißabfrage in MySQL-Abfrageergebnissen

So implementieren Sie eine mehrspaltige Spleißabfrage in MySQL-Abfrageergebnissen

Jetzt müssen wir die Daten in der Benutzertabelle abfragen und die entsprechenden Standortinformationen (Name) in der Adresstabelle basierend auf dem Wert der Provinz und abfragen Stadt in die Benutzertabelle eintragen und anzeigen;

Ich beherrsche SQL nicht, also habe ich eine allgemeine Logik herausgefunden

Zuerst müssen wir die Werte der drei Felder Provinz und Stadt in der Benutzertabelle abrufen. Unsere allgemeine Abfragemethode ist

SELECT province,city,district FROM `user` WHERE id =1;
Nach dem Login kopieren

Das ist relativ einfach: Erhalten Sie Das Ergebnis ist der Wert einer Zeile und drei Spalten, wie in der Abbildung gezeigt:

So implementieren Sie eine mehrspaltige Spleißabfrage in MySQL-Abfrageergebnissen

Dies ist die normale Schreibweise und verwenden Sie dann dieses Ergebnis als Abfragebedingung, um den Namen in der Adresstabelle abzufragen.

Natürlich scheint die Idee gut zu sein, aber die Ergebnisse der Abfrage sind in drei Abschnitte unterteilt, was für unsere nachfolgenden Abfragen nicht förderlich ist Verarbeiten Sie sie dann, bevor Sie sie abfragen. Zu diesem Zeitpunkt müssen wir zwei SQL-Funktionen verwenden, CONCAT_WS und CONCAT. Die Funktion der beiden Funktionen besteht darin, die spezifische Verwendung zu finden auf Baidu. Ich werde es hier nicht vorstellen:)

Unsere Abfrageanweisung kann also wie folgt geschrieben werden:SELECT CONCAT_WS(',',province,city,district) AS ids FROM `user` WHERE id =1;

So implementieren Sie eine mehrspaltige Spleißabfrage in MySQL-Abfrageergebnissen

Mit diesem Ergebnis können wir die Adressinformationen grundsätzlich auf ähnliche Weise abfragen Beim Abfragen der Adressinformationen haben wir auch entsprechendes Spleißen vorgenommen, sodass die endgültige SQL wie folgt lautet:

SELECT GROUP_CONCAT(`name`) FROM address WHERE id IN (SELECT CONCAT_WS(',',province,city,district) FROM `user` WHERE id =1);
Nach dem Login kopieren

Das ideale Ergebnis ist wie in der Abbildung dargestellt:

So implementieren Sie eine mehrspaltige Spleißabfrage in MySQL-Abfrageergebnissen

Aber tatsächlich kann diese Anweisung nicht die gewünschten Ergebnisse erzielen Der Grund dafür ist, dass das Ergebnis von SELECT CONCAT_WS(',',province,city,district) FROM `user` WHERE id =1 ein String ist, der String jedoch nicht als Bedingung von In in der Abfragebedingung verwendet werden kann Das Abfrageergebnis ist nicht das, was wir wollen.

Lassen Sie uns unsere Idee noch einmal analysieren. Es gibt kein Problem. Wie können wir diese Zeichenfolge als Abfragebedingung verwenden und schließlich die gewünschten Ergebnisse erhalten? Der Inhalt der Abfragebedingung kann nur numerisch sein, daher wird die Zeichenfolgenabfrage nicht unterstützt. Um ehrlich zu sein, ist dies das erste Mal, dass ich diese Funktion kenne Ein bisschen über das Hinzufügen, Löschen, Ändern und Überprüfen von MySQL, haha. Dann wird die endgültige SQL wie folgt ausgeführt:

SELECT
  GROUP_CONCAT(`name`)
FROM
  address
WHERE INSTR(
    (SELECT
      CONCAT_WS(',', province, city, district)
    FROM
      `user`
    WHERE id = 1),
    id
  ) ;
Nach dem Login kopieren

Das Endergebnis ist natürlich auch das, was wir wollen Das Ergebnis der Suche nach der Adresse kann je nach Geschäftsanforderungen geändert werden. Man muss sagen, dass die Funktionen von MySQL in Zukunft noch sehr leistungsfähig sind
SELECT
  GROUP_CONCAT(`name`)
FROM
  address
WHERE INSTR(
    CONCAT(
      ',',
      (SELECT
        CONCAT_WS(',', province, city, district)
      FROM
        `user`
      WHERE id = 1),
      ','
    ),
    CONCAT(',', id, ',')
  ) ;
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonSo implementieren Sie eine mehrspaltige Spleißabfrage in MySQL-Abfrageergebnissen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:yisu.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage