sql >> Database teknologi >  >> RDS >> Mysql

MySQL XML-forespørgsel

En løsning på dit problem ville kræve brugen af ​​et numbers tabel:en tabel med heltal, 1,2,3,.... op til en rimelig værdi, f.eks. 1024.

Du ville derefter bruge String Walking for at løse problemet.

Her er CREATE TABLE-sætningen for numbers tabel:

CREATE TABLE numbers (
  `n` smallint unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`n`)
)
;
INSERT INTO numbers VALUES (NULL);
INSERT INTO numbers SELECT NULL FROM numbers;
INSERT INTO numbers SELECT NULL FROM numbers;
INSERT INTO numbers SELECT NULL FROM numbers;
INSERT INTO numbers SELECT NULL FROM numbers;
INSERT INTO numbers SELECT NULL FROM numbers;
INSERT INTO numbers SELECT NULL FROM numbers;
INSERT INTO numbers SELECT NULL FROM numbers;
INSERT INTO numbers SELECT NULL FROM numbers;
INSERT INTO numbers SELECT NULL FROM numbers;
INSERT INTO numbers SELECT NULL FROM numbers;
 

Ovenstående udfyldes med værdierne 1..1024

Og nu forespørgslen:

SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(ExtractValue(@XML, '/As/A/B'), ' ', n), ' ', -1) AS value FROM numbers WHERE n BETWEEN 1 AND ExtractValue(@XML, 'count(/As/A/B)') ; +-------+ | value | +-------+ | Chan | | Shey | | Bob | +-------+ 3 rows in set (0.02 sec)

Vi bruger ExtractValue(@XML, 'count(/As/A/B)') for at få værdien 3 -- antallet af matchende XML-elementer.

Ved at løbe gennem tallene 1, 2, 3 udtrækker vi token #1, token #2, token #3 fra teksten CHAN SHEY BOB , opdeling efter mellemrum.

Bemærkninger:

  • ExtractXML returnerer værdier mellemrumssepareret. Men hvis der er et mellemrum i den returnerede tekst - så gå ikke. Det ville ikke kunne skelnes fra de afgrænsende rum.

  • Det er muligt at undgå at oprette taltabellen og generer tallene i farten . Jeg fraråder -- det ville skabe en masse overhead. At have en tabel med 1024 rækkenumre er altid rart at have.

Held og lykke!



  1. Administrer MySQL med phpMyAdmin på Ubuntu 9.10 (Karmic)

  2. PDO-hentning returnerer kun første række

  3. Sådan fungerer NCHAR()-funktionen i SQL Server (T-SQL)

  4. Bestemmelse af, om MySQL-tabelindeks eksisterer før oprettelse