Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ PHP _ [PHP][MysSQL] Grupowanie wielu przedmiotów wg kategorii

Napisany przez: adek- 14.02.2018, 19:32:47

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


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ź

Napisany przez: Kshyhoo 14.02.2018, 19:36:25

Polecam http://nospor.pl/grupowanie-wynikow.html, ostatnio sam walczyłem z podobnym problemem.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)