Bonsoir a tous,
je termine sur le forum car je crois que j'ai epuiser toutes mes ressources pour resoudre ce probleme.
Je vous explique, il s'agit de creer une table a partir d'une requete, jusque la pas de probleme. Le soucis est dans la source des données.
Soit la table A avec un champs ID et un champs de type longtext
Ce champs contient du XML
je vous donne en fichier joins le XML qui se trouve dans ce champs.
Dans le XML il y a un champs 866 avec des sous champs a et z. J'arrive a extraire les données grace a cette requete:
Le resultat est:Code:
1
2
3
4
5 select ExtractValue( marcxml, '//datafield[@tag="866"]/subfield[@code="a"]' ) as A, ExtractValue( marcxml, '//datafield[@tag="866"]/subfield[@code="z"]') as Z from biblioitems where biblionumber=16;
J'ai coupé le resultat car il y a plus de lignes...Code:
1
2
3
4
5
6
7
8
9 -------------------------------------------------------------------------------------------------------- | A +------------------------------------------------------------------------------------------------------- | Any inf.: 1961 Ed. s.a. Any inf.: 1965 Ed. s.a. v. 1-2 Any inf.: 1966 Ed. s.a. Any inf.: 1967 Ed. s.a. +------------------------------------------------------------------------------------------------------- | Z ----------------------------------------------------------------------------------------------------------------------------------------------------------------- v. 1-2 v. 1-2 v. 1 Guia v. 2 PlÃ*nols v. 1 Guia v. 2 PlÃ*nols v. 1 Guia v. 2 PlÃ*nols ---------------------------------------------------------------------------------------
Mais voila, avec le extractvalue tous les 866 a et les 866 z du XML sortent dans le même tuple.
Je donne ici un extrait du XML pour mieux comprendre:
Donc le select marche bien vue que j'ai plusieurs Any inf.: XXXX qui correspond au 866 aCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 <datafield tag="866" ind1=" " ind2="0"> <subfield code="8">2.34</subfield> <subfield code="a">Any inf.: 1997 Ed. 1997</subfield> <subfield code="z">v. 1-2</subfield> </datafield> <datafield tag="866" ind1=" " ind2="0"> <subfield code="8">2.35</subfield> <subfield code="a">Any inf.: 1998 Ed. 1998</subfield> <subfield code="z">v. 1 Guia</subfield> <datafield tag="866" ind1=" " ind2="0"> <subfield code="8">2.36</subfield> <subfield code="a">Any inf.: 1998 Ed. 1998</subfield> <subfield code="z">v. 2 PlÃ*nols</subfield> </datafield> <datafield tag="866" ind1=" " ind2="0"> <subfield code="8">2.37</subfield> <subfield code="a">Any inf.: 1999 Ed. 1999</subfield> <subfield code="z">v. 1 Guia</subfield> </datafield> <datafield tag="866" ind1=" " ind2="0"> <subfield code="8">2.38</subfield> <subfield code="a">Any inf.: 1999 Ed. 1999</subfield> <subfield code="z">v. 2 PlÃ*nols</subfield>
et v. 1 ou v.2 XXXX qui correspond au 866 z
Ce que je voudrais c'est avoir un tuple par datafiled
exemple:
id a z
16 Any inf.: 1999 Ed. 1999 v. 1 Guia
16 Any inf.: 1998 Ed. 1998 v. 2 PlÃ*nols
plutôt que dans un seul tuple:
16 Any inf.: 1999 Ed. 1999 Any inf.: 1998 Ed. 1998 v. 1 Guia v. 2 PlÃ*nols
voila je suis pas sur d'avoir ete tres claire.
Le truc serait de trouver la forme de separer chaque <datafield tag="866"></datafield> pour en faire une ligne pour chaque au lieu d'avoir tout dans la même ligne...
Seulement en SQL ou CODE MYSQL mais c'est pas possible d'avoir du shell ou python ou php.
Est ce possible?