![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 12.02.2013 Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Posiadam dość nietypowy układ tabel w bazie danych - dla uściślenia - jest to wtyczka do Worpress'a "formidable" - umożliwiająca generowanie formularzy. Dość duże możliwości zapisu i odczytu z bazy, ale ja potrzebuję czegoś nietypowego. Generalnie chodzi mi o dwie tabele które mają następującą strukturę: tabela "frm_items" posiadająca min. pola: - id - user_id - name - itd oraz tabela "frm_item_metas" - id - meta_value - field_id - item_id W polu meta_value przechowywane są różne wartości, powiązanie pomiędzy jedną a drugą tabelą jest na podstawie klucza obcego item_id pochodzącego z pierwszej tabeli. I teraz tak, potrzebuję zsumować wartości z pola meta_value gdzie field_id = 92 - i z tym sobie poradziłem poleceniem:
Problem polega na tym, że potrzebuję zawęzić sumowanie w/g daty. Data natomiast znajduje się również w polu meta_value, ale pod identyfikatorem field_id = 88 Samo polecenie zawężające datę wygląda tak:
Jak to razem pożenić ? Czy muszę użyć PHP żeby zrobić jakąć pętle, czy uda się za pomocą jednego polecenia - pomysły mi się skończyły, więc proszę o pomoc. Pozdrawiam |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 186 Pomógł: 18 Dołączył: 2.09.2010 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 12.02.2013 Ostrzeżenie: (0%) ![]() ![]() |
A nie możesz złączyć zapytań operatorem: ? I wtedy w kodzie po ID rozpoznać czego problem dotyczy? Po złączeniu otrzymuje dwa wyniki, a ja chcę otrzymać tylko sumę meta_value gdzie field_id ma wartość 88 Myślałem, żeby najpierw wyciągnąć item_id spełniające warunki zakresu daty
A potem za pomocą funkcji/pętli php sumować po kolei
Ale to nie jest chyba dobre rozwiązanie - generuje strasznie dużo zapytań. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 186 Pomógł: 18 Dołączył: 2.09.2010 Ostrzeżenie: (0%) ![]() ![]() |
albo ja nie dokładnie rozumiem problem ale SUM i GROUP BY powinny rozwiązać problem. Chyba że wygląda to jakoś inaczej może podaj jakieś przykładowe dane i wyniki jakie chciałbyś uzyskać?
![]() |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 12.02.2013 Ostrzeżenie: (0%) ![]() ![]() |
Tabela frm_items:
Tabela frm_item_metas wygląda tak
I jeszcze raz - potrzebuję zsumować wartości z pola value_meta które posiadają field_id = 92 na podstawie daty która znajduje się również w polu meta_value ale posiada field_id = 88 |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 186 Pomógł: 18 Dołączył: 2.09.2010 Ostrzeżenie: (0%) ![]() ![]() |
Nadal nie wiem jaki przykładowy wynik chcesz otrzymać i dlaczego SUM i GROUP BY nie działają. btw takie dane ciężko się czyta.
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 731 Pomógł: 141 Dołączył: 9.05.2011 Skąd: śląskie Ostrzeżenie: (0%) ![]() ![]() |
Spróbuj sobie spłaszczyć dane do jednej tabeli poprzez taka konstrukcję zapytania, jaką przytoczyłem tutaj.
Jak podajesz przykładowe dane to podaj je w formie możliwej do zaimportowania prosto do bazy/tabeli. -------------------- Szanuj innych czas! Kliknij
![]() |
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 186 Pomógł: 18 Dołączył: 2.09.2010 Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem.... Na moje w tych danych nie ma nic nadzwyczajnego. Poczytaj trochę o złączeniach (JOINy) i wróć do tematu. Bo wygląda na to że wszystko można to łatwo osiągnąć, ale problem opisujesz w taki sposób, że ciężko cokolwiek wywnioskować.
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 12.02.2013 Ostrzeżenie: (0%) ![]() ![]() |
Wybaczcie, wychodzi na to że jestem mocno raczkujący i taka struktura mnie przerasta. Nie mogę załączyć całych tabel bo cały czas mi wywala że mam za długi post, jak skrócę to dane nie mają sensu. Spróbuję jeszcze raz tak:
Tabela frm_items, pola: id -> user_id - reszta jest nieistotna, przykładowe dane: 1 -> 1 2 -> 1 3 -> 2 4 -> 1 5 -> 2 Tabela frm_item_metas, pola: id -> meta_value -> field_id -> item_id - (item_id to klucz obcy pochodzący z pierwszej tabeli z pola id, pod field_id = 88 występuje data, pod field_id = 92 wartość liczbowa do sumowania) 1 -> 60 -> 92 -> 1 2 -> 2014-02-14 -> 88 -> 1 3 -> 40 -> 92 -> 2 4 -> 2014-01-04 -> 88 -> 2 5 -> 20 -> 92 -> 3 6 -> 2014-02-05 -> 88 -> 3 7 -> 60 -> 92 -> 4 8 -> 2014-01-01 -> 88 -> 4 9 -> 10 -> 92 -> 5 10 -> 2014-02-02 -> 92 ->5 I teraz robię tak jak wspomniałem wcześniej:
Otrzymuję sumę wszystkich wartości z pola meta_value, w rekordzie gdzie field_id=92 i wartość to 160, ale ja chciałbym dodatkowo wprowadzić jeszcze wyszukiwanie po dacie, np. suma rekordów w poprzednim miesiącu (powinno wyjść 100) lub aktualnym czyli luty (60). Mam nadzieję że teraz się dobrze wyraziłem - dzięki za cierpliwość Ten post edytował thudy 19.02.2014, 19:04:53 |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 12.02.2013 Ostrzeżenie: (0%) ![]() ![]() |
Wyższa szkoła jazdy ![]() |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 9 Pomógł: 0 Dołączył: 12.02.2013 Ostrzeżenie: (0%) ![]() ![]() |
Wielkie dzięki - wszystko jest OK
![]() |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 15.06.2025 - 11:19 |