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 (1 - 7)
koodo218
post
Post #2





Grupa: Zarejestrowani
Postów: 114
Pomógł: 25
Dołączył: 22.11.2015

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


Obrazek nie działa.
Go to the top of the page
+Quote Post
aquarius1978
post
Post #3





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

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


Prawy klawisz myszki i pokaż obrazek. U mnie to działa
Go to the top of the page
+Quote Post
Lejto
post
Post #4





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 48
Dołączył: 23.05.2007

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


Pokaż zapytania jakie pisałeś.
Go to the top of the page
+Quote Post
aquarius1978
post
Post #5





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

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


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

Ten post edytował aquarius1978 18.02.2016, 21:10:45
Go to the top of the page
+Quote Post
koodo218
post
Post #6





Grupa: Zarejestrowani
Postów: 114
Pomógł: 25
Dołączył: 22.11.2015

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


  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')

Go to the top of the page
+Quote Post
aquarius1978
post
Post #7





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
koodo218
post
Post #8





Grupa: Zarejestrowani
Postów: 114
Pomógł: 25
Dołączył: 22.11.2015

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


Dodatkowy warunek:
  1. WHERE YEAR(NOW())-YEAR(pole8) BETWEEN 18 AND 25
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: 23.08.2025 - 01:52