Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Problem z zapytaniem MySql
Forum PHP.pl > Forum > Przedszkole
aquarius1978
Witam,
Poniżej w linku jest obrazek przykładowej bazy danych.



Opis kolumn:
Id - id
pole1 - nr oddziału
pole2 - nr osoby
pole 1+ pole2 tworzą unikalny numer osoby
pole3 - imię
pole4 - nazwisko
pole5 - płeć
pole6 - atrybut
pole7 - nr zamówienia
pole8 - data urodzenia


pyt.1
Jak z podanej tabeli poprzez zapytanie wydobyć informację ile osób miało atrybut b, przy założeniu że jeśli dana osoba miała np. w rekordzie 2 w polu6 atrybut h, a w rekordzie 18 w polu6 miała atrybut b, to taka osoba nas nie interesuje. Interesują mnie tylko osoby które miały atrybut b np. Ala Kot
Jeśli dana osoba miała kilka wpisów zliczona powinna być raz.
pyt.2
Otrzymane wyniki z Pyt.1 należy podzielić wg pola5, czyli wg płci.
pyt3.
Otrzymane wyniki z pyt.2 należy podzielić wg przedziałów wiekowych na podstawie pola8. Czyli z podanej daty wyciągnąć 4 pierwsze cyfry i odjąć od bieżącego roku. Wyniki powinny być wyświetlone wg przedziałów 18-25, 26-35, 36-50 i powyżej 50

Próbowałem robić to podzapytaniami, ale ciągle miałem błąd składni. Zapewne źle się do tego zabierałem.
Proszę o jakąś pomoc lub podpowiedz jak to wszystko można zapisać w jednym zapytaniu, ewentualnie w kilku by uzyskać opisane rezultaty.
Pozdrawiam
koodo218
Obrazek nie działa.
aquarius1978
Prawy klawisz myszki i pokaż obrazek. U mnie to działa
Lejto
Pokaż zapytania jakie pisałeś.
aquarius1978
Cytat(Lejto @ 18.02.2016, 21:03:45 ) *
Pokaż zapytania jakie pisałeś.

Problem mam już z pierwszym punktem, by prawidłowo sie wyświetlał.
  1. SELECT pole3, pole4 FROM tabela1 WHERE pole6='b'

Dalej nie wiem jak ruszyć. Wynik ten oczywiście nia daje prawidłowego rezultatu
koodo218
  1. SELECT COUNT(CONCAT(pole1, pole2)) AS LiczbaOsobzAtrybutemB
  2. FROM tabela
  3. WHERE pole6='b' AND CONCAT(pole1, pole2) NOT IN (SELECT CONCAT(pole1, pole2) FROM tabela WHERE pole6<>'b')

aquarius1978
  1. SELECT DISTINCT CONCAT(pole3, pole4) AS LiczbaOsobzAtrybutemB
  2. FROM test2
  3. WHERE pole6='b' AND CONCAT(pole3, pole4) NOT IN (SELECT CONCAT(pole3, pole4) FROM test2 WHERE pole6<>'b')

Dzięki koodo218, choć przy Twoim zapisie podawał sumę 7, nie usuwał duplikatów, czyli zliczał każdą osobe po tyle razy ile wystapiła.

Teraz za pkt 2. musze się zabrac.
Może jakieś pomysły?

  1. SELECT DISTINCT CONCAT(pole3, pole4) AS LiczbaOsobzAtrybutemB
  2. FROM test2
  3. WHERE pole6='b' AND CONCAT(pole3, pole4) NOT IN (SELECT CONCAT(pole3, pole4) FROM test2 WHERE pole6<>'b' ) AND pole5='k'


Taki zapis spełnia moje oczekiwania, wiec pkt 2 zrobiony.
A ma ktoś pomysł na pkt 3?
koodo218
Dodatkowy warunek:
  1. WHERE YEAR(NOW())-YEAR(pole8) BETWEEN 18 AND 25
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.