![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 29.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam, bardzo proszę popatrzeć na ten plik: http://pastebin.com/YzWiXWjH
Generalnie tak mniej więcej wygląda wynik SELECT z użyciem JOIN w mojej bazie danych. W tabeli firmy mam id, token, name, address, province, www, info Natomiast catID i catName są joinowane z innej tabeli. Mam problem z wyciągnięciem tych danych w loopie bowiem jak widzicie firma o nazwie "Unique" (jak i każda inna) ma dwa wiersze, oba są takie same jednak różnią się numerem kategorii i nazwą kategorii które w ramach relacji pobierane są z innej tabeli. Problem jest taki że jak np. dodam jakąś firme przynależącą do 30 kategorii(jest ich 40) to dla jednej firmy będę miał 40wierszy tych samych a jedynie różniących się dwoma ostatnimi rekordami. No i jak będę starał się to wszystko wyciągnąć w pętli for to każda firma będzie wyświetlana tyle razy ile kategorii ona ma bowiem tyle wpisów będzie miała w bazie. Jak zrobić tak aby pętla for nawet gdy będzie 40 wierszy dla danej firmy wybierała tylko raz (name, token, address, province, www, info) jako dla każdego wpisu będzie to takie samo a tyle razy ile jest kategorii pobierała rekordy catID i catName? Pozdrawiam! |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Nadmiarowość danych jest w tej sytuacji uzasadniona i jak najbardziej normalna. Można ją oczywiście zniwelować po stronie bazy danych (w zapytaniu SQL) posługując się funkcją GROUP_CONCAT dla kolumn catId i catName, i grupując (GROUP BY) po nazwie/id firmy (zastanawiają mnie tylko różne id dla tych samych nazw firm w przykładzie, który wkleiłeś, czy to pomyłka? chodzi o to, że firma Unique ma id równe 1 i id równe 2, a tak być nie powinno). Zapytanie wyglądałoby mniej więcej tak:
Do tego oczywiście możesz dodać odpowiednie sortowanie. To co znajdzie się w wyniku zapytania w pseudokolumnach catIDs i catNames trzeba odpowiednie wyekstrahować po stronie PHP (explode()) przy czym kolejność catIDs odpowiada kolejności catNames. O takim grupowaniu pisał co nieco nospor, poszukaj artykułu na jego stronie/blogu. Nie testowałem nigdy wydajności tego rozwiązania, więc nie wiem, czy będzie ono wystarczająco wydajne. Ten post edytował mortus 11.04.2012, 17:45:14 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 29.12.2010 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki Mortus. GROUP_CONCAT załatwiło sprawę.
Funkcja ta jest bardzo fajnie pokazana tutaj http://epicweb.pl/2009/06/28/funkcja-group-concat/ , na podstawie query które jest tam zaprezentowane zrobiłem własne i wszystko działa Pozdrawiam! |
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.09.2025 - 08:35 |