Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql] zliczanie określonych wartości w kolumnie
cornholio666
post
Post #1





Grupa: Zarejestrowani
Postów: 472
Pomógł: 8
Dołączył: 14.03.2004
Skąd: Rzeszów

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


Witam,

W tableli mam pola miedzy innymi stanowisko, miasto

Stanowisko moze przyjmowac wartosci 'asystent' lub 'kierownik'

Czy da sie za jednym zapytaniem zliczyc ilosc asystentów i ilosc kierowników z jednego określonego miasta?


--------------------
I need TP for my bunghole!!!

Mój nowy przyjaciel - tytanowa płytka na stałe
------------------------------------------------------
AEGEE, kwiaciarnia rzeszów , notariusz rzeszów, zakład krawiecki rzeszów, paweł jakubowicz
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 15)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




group by:
http://dev.mysql.com/doc/refman/5.0/en/select.html

count()
http://dev.mysql.com/doc/refman/5.0/en/gro...-functions.html

i wszystko jasne winksmiley.jpg


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
cornholio666
post
Post #3





Grupa: Zarejestrowani
Postów: 472
Pomógł: 8
Dołączył: 14.03.2004
Skąd: Rzeszów

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


Dokładnie smile.gif

  1. SELECT stanowisko, count(*) AS liczba FROM pracownicy WHERE miasto='Rzeszów' GROUP BY stanowisko_p


I jeszcze pytanie: Czy nie bylo by bardziej wydajenie aby pole stanowisko przyjmowało wartosci 1 lub 0
gdzie 0- kierownik a 1 - asystent i stanowisko byloby typu int ?

Jak tak to dlaczego, jak nie to dlaczego i jak wszytko jedno to dlaczego? winksmiley.jpg

Ten post edytował cornholio666 31.05.2006, 11:29:50


--------------------
I need TP for my bunghole!!!

Mój nowy przyjaciel - tytanowa płytka na stałe
------------------------------------------------------
AEGEE, kwiaciarnia rzeszów , notariusz rzeszów, zakład krawiecki rzeszów, paweł jakubowicz
Go to the top of the page
+Quote Post
mhs
post
Post #4





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

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


..., a w chwili obecnej jakiego typu masz pole w ktorym trzymasz stanowisko? Jezeli ma przyjmowac 0 lub 1 to zmien nawet nie tyle co INT ale na TINYINT(1).
Go to the top of the page
+Quote Post
cornholio666
post
Post #5





Grupa: Zarejestrowani
Postów: 472
Pomógł: 8
Dołączył: 14.03.2004
Skąd: Rzeszów

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


Mam typu varchar i jak jest kierownikiem to wpisuje 'kierownik' a jak asystentem to 'asystent'.

Cytat
Jezeli ma przyjmowac 0 lub 1 to zmien nawet nie tyle co INT ale na TINYINT(1).


No tak ale czy mam zmieniac na tinyint czy nie? i dlaczego?


--------------------
I need TP for my bunghole!!!

Mój nowy przyjaciel - tytanowa płytka na stałe
------------------------------------------------------
AEGEE, kwiaciarnia rzeszów , notariusz rzeszów, zakład krawiecki rzeszów, paweł jakubowicz
Go to the top of the page
+Quote Post
nospor
post
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




To wsyzstko zalezy od tego, czy ci bedzie potrzebny tekst: kierownik, asystent... czy tych stanowisk bedzie wiecej.
Zazwyczaj takie dane, nazywa sie slownikami. Tworzy sie dla nich dodatkową tabele i wniej trzyma sie wszystkie stanowiska: kierownik, asysystent, sekretarka, .... i wiele wiecej.

W glownej tabeli tworzy sie pole, ktore jest kluczem obcym do slownika stanowisk. Pole to jest tego samego typu co id w slowniku, zazwyczaj jest to INT. Ale w zaleznosci od tego, ile tych danych bedzie, sa to rozne rozmiary inta.

jesli tobie zalezy tylko na rozroznieniu: kierownik - asystent , to wal pole TINYINT(1), gdyz ma ono najmniejszy rozmiar i zajmie mniej miejsca.
Jesli tych stanowisk bedzie wiecej, to zaloz se slownik i nadaj dla ID takie typ inta, ile bedzie max danych. Ot cala filozofia smile.gif

edit: jak to czytam jeszcze raz to nie wiem czy mnie zrozumiales winksmiley.jpg


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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





Grupa: Zarejestrowani
Postów: 472
Pomógł: 8
Dołączył: 14.03.2004
Skąd: Rzeszów

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


Tabela stanowiska

id | stanowisko (int) |
------------------------
0 | dyrektor |
1 | kieronik |
2 | sekretarka |


Tablea dane
id | cos | cos2 | id_stanowiska (int)|
-----------------------------------------
0 | sss | gggg | 0 | -> dyrektor
1 | ggg|fgggg | 2 | -> sekretarka
2 | hhh| jjjjjj | 1 | -> kierwonik



o to chodzi ?


--------------------
I need TP for my bunghole!!!

Mój nowy przyjaciel - tytanowa płytka na stałe
------------------------------------------------------
AEGEE, kwiaciarnia rzeszów , notariusz rzeszów, zakład krawiecki rzeszów, paweł jakubowicz
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




dokladnie. aczkolwiek nie polecam zaczynac id od 0 smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
cornholio666
post
Post #9





Grupa: Zarejestrowani
Postów: 472
Pomógł: 8
Dołączył: 14.03.2004
Skąd: Rzeszów

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


Cytat
nie polecam zaczynac id od 0


Moze zdradzisz mi tą tajemnice? cool.gif


--------------------
I need TP for my bunghole!!!

Mój nowy przyjaciel - tytanowa płytka na stałe
------------------------------------------------------
AEGEE, kwiaciarnia rzeszów , notariusz rzeszów, zakład krawiecki rzeszów, paweł jakubowicz
Go to the top of the page
+Quote Post
bigZbig
post
Post #10





Grupa: Zarejestrowani
Postów: 740
Pomógł: 15
Dołączył: 23.08.2004
Skąd: Poznań

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


Ponadto radze aby nazwy polom id nadawac wedlug wzoru tabela dane -> id_dane, tabela stanowiska -> id_stanowiska. W takiej sytuacji masz ulatwione zadanie przy tworzeniu nazwy klucza obcego w tabeli dane. Tabela dane badzie miala nastepujace pola id_dane, cos, cos2 id_stanowiska - i wszystko jasne.

-- edit --
Wartosc 0 moze zostac potraktowana jak false i skrypt zadziala niezgodnie z oczekiwaniami. Zreszta np. autoincrement zawsze zaczyna od 1 i to jest wystarczajacy powod aby sie tej zasady trzymac.

Ten post edytował bigZbig 31.05.2006, 12:58:54


--------------------
bigZbig (Zbigniew Heintze) | blog.heintze.pl
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Moze zdradzisz mi tą tajemnice?

Żadna tajemnica. Poprostu nie polecam, jestem sponsorowany przez inną liczbę i nie wypada mi polecac zera, bo to konkurencja winksmiley.jpg

Z zerem są problemy chociazby przy eksporcie i imporcie danych. Zalozmy ze masz pole primary_key auto_increment. Tabela zawiera juz rekordy o id 0,1,2,3.... robisz teraz eksport tabeli do sql. Nastepnie robisz import tego sql. I jakies bedzie Twoje zdziwienie, gdy dostaniesz errory w stylu:
Cytat
Duplicate entry '1' for key 1

A czemu? ano temu, ze Twj sql bedzie wygladal powiedzmy tak:
  1. INSERT INTO tabela VALUES (0,innedane);
  2. INSERT INTO tabela VALUES (1,innedane);
  3. INSERT INTO tabela VALUES (2,innedane);
  4. //...

no i wbrew pozorom, pierwszy insert nie wstawi wartosci 0 do ID, ale zostanie to potraktowane jakby byl tam null i zostanie wstawiona nastepna wartosc auto_incrementa, czyli przy zerowej bazie: 1. No i teraz nastepny insert chce wlozyc ID 1 i jest problem, gdyż ID 1 juz istnieje


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
KG-
post
Post #12





Grupa: Zarejestrowani
Postów: 61
Pomógł: 0
Dołączył: 30.05.2006

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


Jeśli ta lista stanowisk jest w miarę stała i uaktualniana tylko przez Ciebie to chyba lepiej będzie w celach wyświetlania nazwy stanowiska stworzyć taki słownik w samym php w postaci tablicy, np
  1. <?php
  2. $stanowiska = array( 1 => 'dyrektor', 2 => 'kierownik', 3 => 'sekretarka');
  3. ?>

Zaoszczędziesz w ten sposób LEFT JOINa którego byś musiał użyć przy pobieraniu danych w celu ich wyświetlenia.
Jeśli te stanowiska są konfigurowalne przez innych użytkowników np poprzez jakiś panel admina wtedy nie masz innego wyboru jak umieszczenie tego w bazie i łączenie tabel.

Ten post edytował KG- 31.05.2006, 16:13:13
Go to the top of the page
+Quote Post
SongoQ
post
Post #13





Grupa: Przyjaciele php.pl
Postów: 2 923
Pomógł: 9
Dołączył: 25.10.2004
Skąd: Rzeszów - studia / Warszawa - praca

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


@bigZbig Mam uwage do tego co piszesz.

Cytat
Ponadto radze aby nazwy polom id nadawac wedlug wzoru tabela dane -> id_dane, tabela stanowiska -> id_stanowiska. W takiej sytuacji masz ulatwione zadanie przy tworzeniu nazwy klucza obcego w tabeli dane. Tabela dane badzie miala nastepujace pola id_dane, cos, cos2 id_stanowiska - i wszystko jasne.


Jesli fkey ma byc nadawany to przynajmniej rob tak jak nalezy nazwa tabeli_id
Przyklad dane_id. Polecam np poczytac o ORM


--------------------
Go to the top of the page
+Quote Post
ZaXaZ
post
Post #14





Grupa: Zarejestrowani
Postów: 285
Pomógł: 18
Dołączył: 30.01.2014
Skąd: <?=$_GET['city']?>

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


Mały odkop (podobne pytanie), można zliczyć jakoś kilka wartości kolumn?,
próbowałem tak ale nie działa...

  1. SELECT COUNT(`id`) AS total, COUNT(x='tak') AS xT,
  2. COUNT(x='nie') AS xN,
  3. COUNT(y='tak') AS yT,
  4. COUNT(y='nie') AS yN,
  5. COUNT(z='tak') AS zT,
  6. COUNT(z='nie') AS zN
  7. FROM `users`;


--------------------
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #15





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Zamien COUNT na SUM (oprocz pierwszego)
Go to the top of the page
+Quote Post
ZaXaZ
post
Post #16





Grupa: Zarejestrowani
Postów: 285
Pomógł: 18
Dołączył: 30.01.2014
Skąd: <?=$_GET['city']?>

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


Cytat(mmmmmmm @ 18.04.2014, 20:52:33 ) *
Zamien COUNT na SUM (oprocz pierwszego)


Dzięki, Działa!! Mam nadzieję że ktoś z odpowiednimi uprawnieniami kliknie tobie "pomógł" jako że odpowiadałeś mi ale nie w moim temacie.


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 18:01