Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Problem ze zbudowaniem zapytania
Foxx
post
Post #1





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

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


A więc mam problem ze zbudowaniem zapytania.

Dwie tabele:

uzytkownik (id)
uzytkownik_dzieci (id, uzytkownik_id, wiek)

W tabeli "uzytkownik_dzieci" mam informacje o dzieciach użytkowników: każdy rekord oznacza 1 dziecko danego użytkownika + wiek (nieistotny teraz).
Czyli informację o liczbie dzieci przechowuje się w liczbie rekordów tej tabeli.

I teraz mam zapytanie
  1. SELECT uzytkownik.id FROM uzytkownik JOIN uzytkownik_dzieci ON uzytkownik.id=uzytkownik_dzieci.uzytkownik_id


I teraz moje zadanie polega na tym, że chciałbym pobrać użytkowników, którzy mają 2, 3 lub 4 dzieci czyli 2, 3 lub 4 rekordy w tej tabeli "uzytkownik_dzieci". Głowię się nad tym i niestety nie umiem tego rozwiązać. Będę wdzięczny za pomoc.

Dodam jeszcze, że idealne byłoby dla mnie zrobienie tego manipulując zapytaniem za "WHERE", a nie przed - jestem w stanie zaakceptować zagnieżdżone zapytania. Ale oczywiście jeżeli trzeba manipulować całym zapytaniem to trudno. Zaznaczam to dlatego, że w rzeczywistości mam więcej joinowanych tabeli i już trochę klauzul WHERE, chciałbym to jakoś bezboleśnie dodać do zapytania. Bolesne byłoby nawet dodanie czegokolwiek za SELECT - teraz jest tam tylko uzytkownik.id

Ten post edytował Foxx 6.07.2013, 21:27:53
Go to the top of the page
+Quote Post
SmokAnalog
post
Post #2





Grupa: Zarejestrowani
Postów: 1 707
Pomógł: 266
Dołączył: 3.07.2012
Skąd: Poznań

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


Zakładając, że wybierasz wszystkie kolumy z tabeli `uzytkownik`:
  1. SELECT uzytkownik.*, count(*) AS liczba_dzieci
  2. FROM uzytkownik_dzieci
  3. JOIN uzytkownik
  4. ON uzytkownik.id = uzytkownik_dzieci.uzytkownik_id
  5. GROUP BY uzytkownik.id
  6. HAVING liczba_dzieci BETWEEN 2 AND 4

Póki co masz tam tylko kolumnę id. Jeśli tak zostanie, to w sumie nie musisz w ogóle robić JOIN, bo wystarczy działać na tabeli `uzytkownik_dzieci`, która też posiada id użytkownika (rodzica dziecka).
Go to the top of the page
+Quote Post
Foxx
post
Post #3





Grupa: Zarejestrowani
Postów: 896
Pomógł: 76
Dołączył: 15.11.2003
Skąd: Sosnowiec/Kraków

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


Dzięki.
Mam w tabeli więcej kolumn poza id, pominąłem je w przykładzie żeby było prościej - ale kolumny są i potrzebuję ich. Dlatego robię ten JOIN.
W międzyczasie stwierdziłem, że jednak nie mogę wstawić żadnej dodatkowej kolumny poza .id za klauzulą SELECT bo musiałbym przerobić mechanizm odbierający wyniki z tego zapytania, który nie jest zbyt elastyczny.

Rozwiązałem problem tworząc dodatkowe pole, do którego przeliczam liczbę dzieci i przechowują ją dodatkowo jako liczbę. Dzięki za pomoc.
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 18.09.2025 - 18:41