![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 9.08.2011 Ostrzeżenie: (0%) ![]() ![]() |
Cześć
![]() Jako, że to mój pierwszy post chciałbym się przywitać ![]() ![]() Mam formularz, w którym to generuję listę opcji z danych pobranych z bazy. Jest to dokładniej lista terminów. Potrzebuję też od razu przy generowaniu sprawdzić czy w drugiej tabeli bazy ilość wystąpień tego terminu nie przekracza określonej ilości. Najłatwiej było by w pętli generującej listę terminów za każdym razem odpytywać bazę dla danego id terminu, ale z tego co się orientuję to zapytania do bazy należy ograniczać, stąd chcę najpierw pobrać z bazy całą tabelę, o strukturze: Kod term_id | ile 1 | 3 2 | 2 3 | 5 Z tym nie ma problemu, proste zapytanie. Następnie w pętli generującej listę terminów do wyboru chcę sprawdzać, czy dla danego id terminu wartość ile jest większa od danej stałej (np. 3). Pytanie: Jak wybrać z takiej dwuwymiarowej tablicy wartość ile dla danego term_id? Pewnie nie jest to skomplikowane, natomiast nastąpiło jakieś zaćmienie i za nic nie mogę tego napisać ![]() Z góry dziękuję za pomoc. Pozdrawiam Calfy Ten post edytował Calfy 15.10.2012, 19:35:03 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Skoro tabele się łaczą, to użyj JOINowania (zadanie domowe to jakie konkretnie tu użyć). Potem pogrupuj po id terminu i jeśli chcesz uzyskać tylko z określonym warunkiem, to klauzula HAVING powinna Ci pomóc
![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 9.08.2011 Ostrzeżenie: (0%) ![]() ![]() |
Tzn. chyba trochę źle się wyraziłem. Ja odpowiednie dane z sql'a już pobrałem, użyłem JOIN'a itd
![]() Kod [0] => Array ( [term_id] => 1 [ile] => 3 ) [1] => Array ( [term_id] => 3 [ile] => 2 ) [2] => Array ( [term_id] => 10 [ile] => 5 ) I teraz chodzi jedynie o wyciąganie w kolejnych przejściach pętli wartości "ile" dla zadanego "term_id". A klauzura HAVING zmusiłaby mnie chyba do używania zapytania w pętli, a tego chcę uniknąć. Chyba że źle zrozumiałem, i można jakoś lepiej podczas wyciągania z bazy podzielić te dane w osobne tabele czy coś ![]() Ten post edytował Calfy 15.10.2012, 21:11:49 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 590 Pomógł: 107 Dołączył: 25.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
O ile dobrze rozumiem, to możesz spróbować przerzucić całą robotę na bazę, do zapytania dodaj "WHERE ile<=3".
Natomiast jak już masz te dane w tablicy, to odwołujesz się normalnie: $tablica[0]['term_id']. To chyba wszystko, co przychodzi mi do głowy ![]() |
|
|
![]()
Post
#5
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Napiszę językiem ludzkim. Klauzula HAVING jest odpowiednikiem WHERE na pogrupowanych danych. Jeśli dobrze Cię zrozumiałem, to chodzi Ci o wydzielenie takich id_termin, które mają określoną liczbę wystąpień. Można to zrobić właśnie z HAVING bo możesz tam użyć funkcji agregujących (sum, count) i otrzymać coś w deseń:
Oczywiście jeśli przekroczy jakiś id_term limit, nie znajdzie się w wyniku. Ale może źle zrozumiałem co chcesz zrobić? Jakby co wyjaśnij ![]() -------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 9.08.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dziękuję za wszystkie odpowiedzi. Na początku trochę się zapędziłem, bo zamiast skupić się na zapytaniu do bazy tu uznałem że będę przeszukiwał w PHP'ie tablicę, którą tam gdzieś na początku wrzuciłem, ale faktycznie to bez sensu. Lepiej poprawnie odpytać bazę
![]() Tak więc, zapytanie napisane :)Obecnie wygląda tak (potrzebowałem jeszcze wybrać terminy dla odpowiedniego miasta): Kod select m.term_id, count(m.term_id) from term t INNER JOIN member m ON t.term_id=m.term_id WHERE m.city_id=3 GROUP BY m.term_id HAVING count(m.term_id) < 10 Jeżeli gdzieś jest błąd to prosiłbym o zwrócenie uwagi ![]() Teraz mając już jednowymiarową tablicę nie problem sprawdzić w niej czy dany element się w niej znajduje ![]() Jeszcze raz wielkie dzięki za wszelką pomoc ![]() Ten post edytował Calfy 16.10.2012, 22:53:49 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 00:53 |