Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: MS SQL i XML
Forum PHP.pl > Forum > Bazy danych
bartek_em
Witam.

Mam takiego XML
  1. <?xml version="1.0"?>
  2. <osoba>
  3. <imie>Stanislaw</imie>
  4. <nazwisko>Kowalski</nazwisko>
  5. <pokolenie>1</pokolenie>
  6. <wspolmal>
  7. <imie>Barbara</imie>
  8. <nazwisko>Babacka</nazwisko>
  9. <pokolenie>1</pokolenie>
  10. <osoba>
  11. <imie>Krzysztof</imie>
  12. <nazwisko>Kowalski</nazwisko>
  13. <pokolenie>2</pokolenie>
  14. <wspolmal>
  15. <imie>Martyna</imie>
  16. <nazwisko>Abacka</nazwisko>
  17. <pokolenie>2</pokolenie>
  18. <osoba>
  19. <imie>Zbigniew</imie>
  20. <nazwisko>Kowalski</nazwisko>
  21. <pokolenie>3</pokolenie>
  22. <wspolmal>
  23. <imie>Izabela</imie>
  24. <nazwisko>Peszko</nazwisko>
  25. <pokolenie>3</pokolenie>
  26. </wspolmal>
  27. </osoba>
  28. <osoba>
  29. <imie>Kamil</imie>
  30. <nazwisko>Kowalski</nazwisko>
  31. <pokolenie>3</pokolenie>
  32. </osoba>
  33. <osoba>
  34. <imie>Maria</imie>
  35. <nazwisko>Kowalski</nazwisko>
  36. <pokolenie>3</pokolenie>
  37. </osoba>
  38.  
  39. </wspolmal>
  40. </osoba>
  41.  
  42.  
  43. <osoba>
  44. <imie>Katarzyna</imie>
  45. <nazwisko>Kowalski</nazwisko>
  46. <pokolenie>2</pokolenie>
  47. <wspolmal>
  48. <imie>Mariusz</imie>
  49. <nazwisko>Nowak</nazwisko>
  50. <pokolenie>2</pokolenie>
  51. <osoba>
  52. <imie>Michal</imie>
  53. <nazwisko>Nowak</nazwisko>
  54. <pokolenie>3</pokolenie>
  55. <wspolmal>
  56. <imie>Krystyna</imie>
  57. <nazwisko>Lis</nazwisko>
  58. <pokolenie>3</pokolenie>
  59. </wspolmal>
  60. </osoba>
  61.  
  62. <osoba>
  63. <imie>Daniel</imie>
  64. <nazwisko>Nowak</nazwisko>
  65. <pokolenie>3</pokolenie>
  66. </osoba>
  67. </wspolmal>
  68. </osoba>
  69. </wspolmal>
  70. </osoba>


Jest to jakieś drzewo genealogiczne wymyślone przeze mnie. No i wprowadziłem sobie tego xmla do bazy MS SQL. Wszystko jest w jednej kolumnie.

No i chce napisać komende sqlową która pozwoli znalść kogoś bez wspolmalzonka badz pare bez dziecka i mu go dodać. Narazie mam takie coś
  1. SELECT opis.query('//osoba[imie="Krzysztof" and nazwisko="Kowalski" and pokolenie= "2"]/wspolmal') FROM dzewo;
, to pozwala znaleść kogoś i wypisać jego wspolmaloznka(choć tak to miało wyglądać, rzeczywiscie pokazuje cały węzeł ).Tez nie bardzo mam pomysł jak by napisać by nie wypisywane były pod wezły we <wspolmal></wspolmal>.

Jak ktoś ma pomysł, prosił bym o sugestie.
Noidea
No cóż, trochę średnio logiczną strukturę tego dokumentu sobie wymyśliłeś i później są problemy.
Poskładaj sobie kawałek XMLa który chcesz zwrócić w return:
  1. SELECT opis.query('
  2. for $osoba in //osoba
  3. where $osoba/imie="Krzysztof" and
  4. $osoba/nazwisko="Kowalski" and
  5. $osoba/pokolenie=2
  6. return <wspolmal>
  7. {
  8. $osoba/wspolmal/imie,
  9. $osoba/wspolmal/nazwisko,
  10. $osoba/wspolmal/pokolenie
  11. }
  12. </wspolmal>
  13. ')
  14. FROM drzewo



EDIT:
Lub jeśli wolisz styl bardziej XPathowy:
  1. SELECT opis.query('
  2. let $wspolmalzonek := //osoba[imie="Krzysztof" and nazwisko="Kowalski" and pokolenie=2]/wspolmal
  3. return <wspolmal>
  4. {
  5. $wspolmalzonek/imie,
  6. $wspolmalzonek/nazwisko,
  7. $wspolmalzonek/pokolenie
  8. }
  9. </wspolmal>
  10. ')
  11. FROM drzewo
bartek_em
A no miałem problem coś bardziej logicznego wymyśleć. Dzięki za pomoc z tym wypisywaniem. A wiesz może, jak by dodawanie zrealizować?
sunpietro
zainteresuj się SPARQL winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.