Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL]Problem z zapytaniem MySql
aquarius1978
post
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 31.03.2012

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


Witam,
Poniżej w linku jest obrazek przykładowej bazy danych.

(IMG:http://ifotos.pl/zobacz/danejpg_sesnahr.jpg)

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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
aquarius1978
post
Post #2





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 31.03.2012

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


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

Posty w temacie


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: 15.10.2025 - 00:02