Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][MysSQL] Grupowanie wielu przedmiotów wg kategorii
adek-
post 14.02.2018, 19:32:47
Post #1





Grupa: Zarejestrowani
Postów: 118
Pomógł: 2
Dołączył: 19.04.2007
Skąd: Częstochowa

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


Cześć chłopaki, pytanie lakoniczne, mam tabelę pracowników [id, imie, nazwisko, miasto pracy, region] oraz tabele miast [id_miasta, nazwa_miasta] i tabele regionów [id_regionu, nazwa_regonu] małopolska, śląskie itd. wink.gif I teraz pytanie, bo nie mogę sobie z nim poradzić, jak zrobić bez loopa w PHP jedno zapytanie, aby na stronie wyświetlało mi się:

MIASTO 1
-Pracownk 1
-Pracownik 2
-Pracownik 3
-Pracownik ... n
MIASTO 2
-Pracownk 1
-Pracownik 2
-Pracownik 3
MIASTO ... n

Czyli raz wyświetlało dane miasto, a pod nim wszyscy pracownicy przypisani do tego miasta

  1. <ul class="lista">
  2. <?php if(isset($lista)) : ?>
  3. <?php foreach ($lista as $swf) : ?>
  4. <li id="miasto" class="files">
  5. <a href="#miastoX"><?php echo $swf['miasto']; ?></a>
  6. <ul class="sub-menu">
  7. <li><a href="#"><?php echo $swf['pracownik']; ?></li>
  8. </ul>
  9. </li>
  10. <?php endforeach; ?>
  11. <?php endif; ?>
  12. </ul>


Próbowałem z różnymi zapytaniami, od najprostszych, po zagnieżdżone z DISTINCT z grupowaniem i orderowaniem wielokrotnym i na wszystkie sposoby i finalnie i tak nie potrafię zadać właściwego.

  1. SELECT DISTINCT *
  2. FROM pracownik AS p
  3. LEFT JOIN miasta AS m ON p.miasto = m.id_miasta
  4. LEFT JOIN regiony AS r ON p.region = r.id_regionu
  5. WHERE r.id_regionu=1
  6. // na początku ograniczyłem widok do jednego regionu, plus celowo nie wpisałem GROUP BY i ORDER BY, bo już wszystkiego próbowałem, nawet podwójnego ORDER BY miasto, pracownik ;)


Później próbowałem bardziej zagnieżdżać Region->Miasto->pracownicy, bo myślałem, że jak będę bardziej kombinował, to przez przypadek wpadnę na coś, zmieniając przy okazji formę zapytania
  1. SELECT id_regionu, nazwa_regionu, pracownicy.*
  2. FROM regiony AS r
  3. JOIN (
  4. SELECT p.id, p.nazwisko
  5. FROM pracownicy AS p
  6. LEFT JOIN miasta AS m ON m.id_miasta = p.id
  7. ) AS pracownicy ON pracownicy.region = r.id_regionu
  8. ORDER BY region, id_miasta
  9.  


PS tak jak mówię, chciałbym zrobić jeden SELECT, bez zagnieżdżania dwóch zapytań, czyli pętli miast, a w niej pętla pracownicy z drugim SELECTEM. Założę się, że problem blachy, więc podpowiedzcie proszę czego mam szukać w google? Zapewne podstawy pętli PHP, albo postawy grupowania MySQL... wrrr wink.gif Przy tym kodzie HTML który umieściłem, ciągle dostaję wynik powielonego miasta i pod nim jeden pracownik. Serdecznie dziękuję za podpowiedź
Go to the top of the page
+Quote Post
Kshyhoo
post 14.02.2018, 19:36:25
Post #2





Grupa: Opiekunowie
Postów: 3 782
Pomógł: 308
Dołączył: 4.01.2005
Skąd: że




Polecam klik, ostatnio sam walczyłem z podobnym problemem.


--------------------
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 Wersja Lo-Fi Aktualny czas: 24.02.2018 - 03:22