Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem ze zbudowaniem zapytania
Forum PHP.pl > Forum > Bazy danych > MySQL
Foxx
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
SmokAnalog
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).
Foxx
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.
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.