Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Sortowanie wyników
zman85
post 29.07.2012, 01:17:28
Post #1





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 25.05.2005

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


Witam,
mam mały problem być może tak prosty do rozwiązania, że aż głupi ale jest.
Dotyczy przesortowania wyników wyciąganych z bazy MySQL.

Mianowicie mam tabelkę z kolorami:
ID Kolor Seria Info
1 Biały Kobiety fghsdfgh
2 Beżowy Kobiety jhedjdghjdg
3 Czerwony Kobiety fghsdfgh
4 Zielony Mężczyźni jhedjdghjdg
5 Fioletowy Mężczyźni jhedjdghjdg
6 Amarant Mężczyźni fghsdfgh

gdzie serii i kolorów jest kilkaset kombinacji, nie ma szans na przypisane sztywnego koloru do zapytania
oraz tabelkę z harmonogramem:
ID KolorID SeriaID InfoID Imię Nazwisko Stanowisko itd.
1 1 1 jhedjdghjdg Ania Miś Referent ...

Potrzebuję w tym momencie wyświetlić wszystkich z wybranym kolorem, wybraną serią, posortować rosnąco przez stanowisko oraz zostawić wszystkie z pierwszym napotkanym InfoID w tabeli harmonogram.
  1. $zap="SELECT * FROM harmonogram WHERE kolor_id='Beżowy' AND seria='Kobiety' ORDER BY stanowisko ASC, pierwsze znalezione InfoID w tabeli harmonogram";



Wiem, że mógłbym przed każdym wyciągnięciem wyciągnąć dodatkowo pierwsze InfoID z tabelki kolory i wrzucić do zapytania:
  1. $zap="SELECT * FROM harmonogram WHERE kolor_id='Beżowy' AND seria='Kobiety' AND InfoID='$infoid' ORDER BY stanowisko ASC, pierwsze znalezione InfoID w tabeli harmonogram";

ale obawiam się, że już za dużo zapytań o harmonogram mam, nie chce tak obciążać bazy bo ją ubije kiedyś w końcu.

Ten post edytował zman85 29.07.2012, 02:02:48
Go to the top of the page
+Quote Post
d3ut3r
post 29.07.2012, 04:54:25
Post #2





Grupa: Zarejestrowani
Postów: 709
Pomógł: 176
Dołączył: 24.10.2010

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


Pierwsza rzecz, która rzuca się w oczy to źle zaprojektowana baza. Logiczniej byłoby tak:

kolory
Kod
ID[Primary, AutoIncrement]|kolor[unique]


serie
Kod
ID[Primary, AutoIncrement]|seria


uzytkownicy
Kod
ID[Primary, AutoIncrement]|Imie|Nazwisko|stanowisko


i dopiero wtedy harmonogram
Kod
ID[Primary, AutoIncrement]|kolor_id|seria_id|user_id


Pobranie informacji o wpisach z harmonogramu z konkretnym kolorem i serią to już tylko kwestia 1 zapytania. Nie rozumiem zupełnie za to:

Cytat
oraz zostawić wszystkie z pierwszym napotkanym InfoID w tabeli harmonogram.


--------------------
http://d3ut3r.wordpress.com/ | mysql_* jest przestarzałe UŻYWAJ PDO!
Go to the top of the page
+Quote Post
zman85
post 29.07.2012, 08:02:36
Post #3





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 25.05.2005

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


Witaj,
baza jest analogicznie stworzona jak to rozpisałeś.

Może źle to napisałem, teraz powinno być prościej:
  1. $zap="SELECT * FROM harmonogram WHERE kolor_id='Beżowy - wartość pobrana z sesji' AND seria='Kobiety - wartość pobrana z sesji' AND (pierwsze napotkane InfoID z tej tabeli) ORDER BY stanowisko ASC";

Biorąc pod uwagę stworzona pokrótce na szybko bazę, było by to wszystkie rekordy z InfoID='jhedjdghjdg'.

Kolor mogę pobrać z sesji, serie również, InfoID nie mam takiej możliwości,
mógłbym pobrać przez oddzielne zapytanie do innej tabeli - nie chce tego robić.

Jestem przekonany, że jest jakaś funkcją pozwalająca wybrać 1 rekord ij ego ustawić jako filtr do sortowania wyników.
Być może JOIN by się tutaj przydał, ale również nie mam pojęcia jak ugryźć - stąd prośba o pomoc.
Go to the top of the page
+Quote Post
CuteOne
post 29.07.2012, 08:27:38
Post #4





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Hmm kiepsko to widzę:
a. sortujesz dane i na ich podstawie dopiero pobierasz InfoID
b. pobierasz dane przed sortowaniem, więc nie wiesz jakie będzie pierwsze InfoID

Jedyne co mi przychodzi na myśl
  1. SELECT
  2. har.*
  3. FROM
  4. harmonogram har
  5. WHERE
  6. har.InfoID = (SELECT InfoID FROM harmonogram WHERE kolor_id=har.kolor_id AND seria=har.seria ORDER BY stanowisko ASC LIMIT 1)
  7. AND
  8. kolor_id='' AND seria='' ORDER BY ORDER BY stanowisko ASC
  9.  

Pogłówkuj z tym

edit: dodałem kolor_id = har.kolor_id nie wiem czy skorelowanie zadziała w wypadku sortowania po obu stronach

Ten post edytował CuteOne 29.07.2012, 08:37:59
Go to the top of the page
+Quote Post
zman85
post 29.07.2012, 11:01:38
Post #5





Grupa: Zarejestrowani
Postów: 47
Pomógł: 0
Dołączył: 25.05.2005

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


Dziękuję CuteOne - udało się!


--
Można zamknąć.
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: 31.05.2024 - 17:32