Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyciągnięcie wybranego wiersza z tablicy asocjacyjnej.
Forum PHP.pl > Forum > PHP
Calfy
Cześć smile.gif

Jako, że to mój pierwszy post chciałbym się przywitać smile.gif I od razu proszę o pomoc smile.gif

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ć smile.gif

Z góry dziękuję za pomoc.
Pozdrawiam
Calfy
thek
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 smile.gif
Calfy
Tzn. chyba trochę źle się wyraziłem. Ja odpowiednie dane z sql'a już pobrałem, użyłem JOIN'a itd smile.gif Mam dla przykładu w skrypcie php taką tablicę:
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ś smile.gif
abort
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 smile.gif
thek
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ń:
  1. SELECT id_term, count(id_term) AS ile FROM tabela JOIN tabela2 ON (tu Twoje łączenie) GROUP BY id_term HAVING ile < 10

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 smile.gif
Calfy
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ę smile.gif
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 smile.gif
Teraz mając już jednowymiarową tablicę nie problem sprawdzić w niej czy dany element się w niej znajduje smile.gif

Jeszcze raz wielkie dzięki za wszelką pomoc smile.gif
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.