[mysq] Problem z SELECTEM

0

Witam,

mam taką strukture bazy danych:
fn_images:
+i_id
+titel
+beschreibung
fn_images_comment
+i_id
+komment
fn_images_user_marker
+i_id
+xpos
+ypos

Chciałbym aby wynik zapytania wyglądał następująco:
Array(i_id,titel,beschreibung,comments,Array(xpos,ypos))

czyli dla kazdego zdjecia jest tablica która przechowuje xpos i ypos (tych wartosci moze byc kilka dla jednego obrazka)

SELECT i.i_id,i.titel, i.filename, i.beschreibung, COUNT(c.i_id) AS comments,m.xpos,m.ypos FROM fn_images i LEFT OUTER JOIN fn_images_comment c USING (i_id) LEFT OUTER JOIN fn_images_user_marker m ON m.i_id=i.i_id WHERE i.ig_id=? GROUP BY i.i_id

zwraca tylko jeden wiersz fn_images_user_marker

Jak wykonać takie zapytanie?

0

nie rozumiem tego zapytania, ono nie wyciągnie tego, co potrzebujesz. w zasadzie nawet nie powinno działać, bo grupujesz tylko po części kolumn z listy w select. w mssql by to nie przeszło.

dostajesz jeden wynik, bo grupujesz po i_id z fn_images, które zdaje się jest unikalne?

poza tym co to za pole ig_id? nie ma go na podanym schemacie.

rozwiązania są dwa - albo jedno zapytanie, zwracające nadmiarowe dane (tzn. dla konkretnego obrazka wszystkie kombinacje komentarzy i pozycji), albo dzielisz to na trzy zapytania. ewentualnie możesz wygenerować wyniki w procedurze składowanej. tak czy inaczej baza danych nigdy nie zwróci array(coś, array(coś innego)), bo dane mogą być zwrócone jedynie w postaci tabelarycznej, a to by oznaczało powielenie "coś" tyle razy, ile jest pozycji w wewnętrznej tablicy.

0

ig_id należy do tabeli fn_images

rozwiązałem to w ten sposób, iż pobieram obrazki, a potem jeśli zachodzi potrzeba pobieram pozycje,

tego: array(coś, array(coś innego)) już się dowiedziałem, że nie mozna osiągnąc


jeśli pobiorę obrazki to musiałbym dla każdego obrazka pobrać pozycje:
5 obrazków to dodatkowe 5 zapytań... jak najprościej zrobić taka tabele jak wspomniałem array(coś, array(coś innego)), chciałbym mieć tablice obrazków, a w niej tablice pozycji

1 użytkowników online, w tym zalogowanych: 0, gości: 1