Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyciągnięcie wybranego wiersza z tablicy asocjacyjnej.
Calfy
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 9.08.2011

Ostrzeżenie: (0%)
-----


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

Ten post edytował Calfy 15.10.2012, 19:35:03
Go to the top of the page
+Quote Post
thek
post
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 smile.gif


--------------------
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
Go to the top of the page
+Quote Post
Calfy
post
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 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

Ten post edytował Calfy 15.10.2012, 21:11:49
Go to the top of the page
+Quote Post
abort
post
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 smile.gif
Go to the top of the page
+Quote Post
thek
post
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ń:
  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


--------------------
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
Go to the top of the page
+Quote Post
Calfy
post
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ę 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

Ten post edytował Calfy 16.10.2012, 22:53:49
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 00:53