Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MYSQL] Grupowanie wyników
DzeSiu
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 1
Dołączył: 21.11.2006

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


Witam, mam następujące tabele:
cities: city_id, name, province
provinces: province_id, name

Czy ta się za pomocą jednego zapytania wyciągnąć z obu baz nazwy miast i pogrupować je wg nazwy województwa plus zliczyć ilość miast w każdym województwie?

  1. SELECT c.name AS miasto ,p.name AS wojewodztwo, COUNT(c.city_id) AS ile FROM cities c, provinces p WHERE c.province = p.province_id GROUP BY p.province_name


ale nie działa to tak, jakbym chciał.

EDIT
dopiero teraz zauważyłem, że jest oddzielny dział na bazy danych, jakby ktoś to przeniósł to bym był dźwięczny winksmiley.jpg

Ten post edytował DzeSiu 15.10.2008, 17:12:44
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
krzyszbi
post
Post #2





Grupa: Zarejestrowani
Postów: 251
Pomógł: 13
Dołączył: 15.09.2005

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


wybranie mist i dołączenie nazwy województwa to najlepiej JOIN-em
czyli
  1. SELECT
  2. c.city_id,c.name AS miasto,
  3. p.province_id,p.name AS wojewodztwo
  4. FROM cities c
  5. JOIN province p ON c.province=p.province_id

a policzenie miast w województwie chyba bez podzapytania się nie odejdzie
ja wykminiłem coś takiego
  1. SELECT
  2. c.city_id,c.name AS miasto,
  3. p.province_id,p.name AS wojewodztwo,
  4. (SELECT COUNT(city_id) FROM cities c WHERE c.province = p.province_id)AS ile
  5. FROM cities c
  6. JOIN province p ON c.province=p.province_id

sprawdź czy działa tak jak powinno
nie wiem jak chcesz to jeszcze wyświetlać bo to też co nieco może zmienić


--------------------
Everything should be made as simple as possible, but not simpler. - A.Eainstein
Go to the top of the page
+Quote Post
batman
post
Post #3





Grupa: Moderatorzy
Postów: 2 921
Pomógł: 269
Dołączył: 11.08.2005
Skąd: 127.0.0.1




Przenoszę na bazy danych -> mysql.


--------------------
I would love to change the world, but they won't give me the source code.
My software never has bugs. It just develops random features.
Go to the top of the page
+Quote Post
DzeSiu
post
Post #4





Grupa: Zarejestrowani
Postów: 6
Pomógł: 1
Dołączył: 21.11.2006

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


(sry, i dzięki za przeniesienie)

Wracając do tematu - działać działa, ale chodziło mi o coś takiego:
w tej chwili wyświetla się to mniej więcej tak:
  1. <?php
  2.    Array(
  3.    [city_id] => 1
  4.    [miasto] => Aleksandrów &#321;ódzki
  5.    [province_id] => 14
  6.    [wojewodztwo] => &#322;ódzkie
  7.    [ile] => 18
  8.    )
  9.    Array(
  10.    [city_id] => 2
  11.    [miasto] => Augustów
  12.    [province_id] => 9
  13.    [wojewodztwo] => podlaskie
  14.    [ile] => 9
  15.    )
  16. etc..
  17. )
  18. ?>


Ja byłbym rad gdyby to wyglądało tak:
  1. <?php
  2.    Array(
  3.    [wojewodztwo] => &#322;ódzkie
  4.    [province_id] => 14
  5.    [ile] => 18
  6.    [miasto] => Array (
  7.       [nazwa] => "cośtam"
  8.       [nazwa] => "cośtam"
  9.       ....
  10.       )
  11.    )
  12. etc..
  13. )
  14. ?>

No chyba, że się nie da, to pozostanie mi wykonanie 16 zapytań, dla każdego województwa osobno

Ten post edytował DzeSiu 15.10.2008, 18:23:10
Go to the top of the page
+Quote Post
krzyszbi
post
Post #5





Grupa: Zarejestrowani
Postów: 251
Pomógł: 13
Dołączył: 15.09.2005

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


właśnie się tak w MySQL-u samym nie dal przynajmniej ja nie wiem ale php pomoże smile.gif

przeleć pętlą i sobie pogrupuj smile.gif
  1. <?php
  2. $wynik // zakladam ze tu dane z zapytania co podałem
  3. $dane = array();
  4. foreach($wynik as $val){
  5. if (!isset($dane[$val['city_id']]){
  6. $dane[$val['city_id']] = array(
  7.  'wojewodztwo' => $val['wojewodztwo']
  8.  'province_id' => $val['province_id']
  9.  'ile' => $val['ile']
  10.  'miasto' => array();
  11. );
  12. }
  13. $val['city_id']['masta'][] = $val['miasto'];
  14. }
  15. ?>


mniej więcej tak
jedne pętelka jest dużo szybsza niż kolejne 15 zapytań smile.gif i bazy się niepotrzebnie nie obciąża

p.s. pisane z palca nie wiem czy działa

Ten post edytował krzyszbi 15.10.2008, 18:31:32


--------------------
Everything should be made as simple as possible, but not simpler. - A.Eainstein
Go to the top of the page
+Quote Post
DzeSiu
post
Post #6





Grupa: Zarejestrowani
Postów: 6
Pomógł: 1
Dołączył: 21.11.2006

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


Trochę to zmodyfikowałem i działa tak jak chciałem:

  1. <?php
  2. $dane = array();
  3. foreach($test as $val){
  4. if (!isset($dane[$val->province_id])) {
  5. $dane[$val->province_id] = array(
  6. 'wojewodztwo' => $val->wojewodztwo,
  7. 'province_id' => $val->province_id,
  8. 'ile' => $val->ile,
  9. 'miasta' => array()
  10. );
  11. }
  12. $dane[$val->province_id]['miasta'][] = $val->miasto;
  13. }
  14. ?>


Musiałem też pozmieniać to i owo bo nie mogłem używać obiektów stdClass jako tablicy. Niemniej jednak dzięki wielkie za pomoc, bo tak się chyciłem tego SQL'a, że całkiem zapomniałem o innych rozwiązaniach winksmiley.jpg

Ten post edytował DzeSiu 15.10.2008, 19:06:32
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: 22.08.2025 - 09:20