![]() |
![]() ![]() |
![]() |
![]() ![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 113 Pomógł: 0 Dołączył: 27.12.2003 Ostrzeżenie: (0%) ![]() ![]() |
Problem jest taki, mam taką tabelę:
i teraz chciałbym zrobić możliwość łączenia różnych wpisów, jako duplikaty, tak by były one w jednej grupie podczas listowania całej tabeli, np:
które normalnie będzie puste (jeżeli takowych duplikatów nie będzie) a jeżeli będą to w dane pole (we wszystkich rekordach) zostanie wpisany ten sam unikalny klusz ( int ) to jeszcze jest ok, tylko problem pojawia się gdy bym chciał taką tablicę wylistować (sortując według daty i godziny) np są takie wpisy:
tutaj od razu odwrócę kolejność (sortując po DACIE i GODZINIE) by było łatwiejsze porównanie
tak aby duplikaty były połaczone w jedną grupę oraz aby była ona wyświetlona na miejscu PIERWSZEGO elementu z grupy (tak że niby dodaje nowy wpis, od razu zaznaczając do jakiej grupy ma należeć, a cała grupa pójdziedo góry i zostanie wyświetlona pod najnowszym wpisem z tej grupy)
oraz myśle że dużo trudniejsza opcja tak aby grupa była wyświetlona na miejscu OSTATNIEGO elementu z grupy (tak że nieby dodaje nowy wpis, od razu zaznaczając do jakiej grupy ma należeć, i ona (oraz reszta elementów z grupy) zostaje wyświetlona pod pierwszym elementem z grupy, ze całość zostaje na miejsc najwcześniejszego wpisu)
Mam nadzieję że ktokolwiek mnie choć troche zrozumiał, nie prosze o gotowe rozwiązanie, jedynie pomoc i nakierowanie mnie, gdyż obecnie nie mam pojęcia jak to zrobić. myślałem o jakimś użyciu DISTINCT duplikat, lub jakim kolwiek sposobie by z rekordów usunąć duplikaty (zostawić tylko jeden pierwszy bądź ostatni) i gdy w wynikach na niego na potkam, to wtedy wczytać reszte, aczkolwiek distinct niestety nie działa w ten sposób.. Ten post edytował Dynuel 1.12.2007, 22:00:21 |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 295 Pomógł: 7 Dołączył: 26.03.2004 Skąd: Opole Ostrzeżenie: (0%) ![]() ![]() |
Przyznam, że nic z tego nie rozumiem. Oglądając listingi pomyślałem, że chodzi Ci o możliwość sortowania tabeli tak, aby powiązane rekordy trzymały się razem.
Aby np wyróżnić główne rekordy od potomnych można utworzyć pole sterujące stylem css na zasadzie:
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 113 Pomógł: 0 Dołączył: 27.12.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Przyznam, że nic z tego nie rozumiem. ok, tak szczerze to przyznam ze właśnie tego się spodziewałem.Jeszcze raz: chcę zrobić sortowanie, a właściwie to dwa rodzaje tego sortowania: grupa - grupa wpisów które mają taką samą wartość w polu DUPLIKAT, te które nie należą do żadnej grupy mają wartość 0 1. wylistować wszystko tak by właśnie duplikaty trzymały się razem w jednej grupie (jeden pod drugim), tylko nie chce sortować według nich by najpierw była jedna grupa duplikatów , potem nastepna , nastepna a na końcu te nie należące do żadnej grupy, lecz tak by grupa była wyświetlona na miejscu (pozycji pomiędzy innymi wpisami) ostatniego (najnowszego) duplikatu (elementu z grupy), 2. to samo co wyżej tylko ze grupa wyświetlana jest na miejscu pierwszego (najstarszego) elementu z grupy (duplikatu) właściwie znalazłem 'jakieś' rozwiązanie tego problemu, niestety w php gdyż na sql'u sie aż tak nie znam, metoda jest taka: 1. sprawdza czy wpis jest duplikatem ( duplikat != 0 ) jeżeli nie to nic z nim nie robi i go normalnie wyświetla a jeżeli tak to: (i teraz w zależności od tego czy chcę by cała grupa duplikatów była wyświetlana na miejscu PIERWSZEGO bądź OSTATNIEGO rekordu z tej grupy) 2. sprawdzam zapytaniem mysql czy to jest PIERWSZY/OSTATNI wpis/duplikat z grupy, jeżeli nie to zostanie on pomijany, jeżeli tak to zostaje on wyświetlony oraz: 3. zostają doczytane pozostałe elementy z taką samą wartością w polu DUPLIKAT, oraz wyświetla je z prametrem CSS robiącym wcięcie czy jakkolwiek zaznaczającym ze są to kopie powyższego wpisu w sumie, zostaje wysłane jedno główne zapytanie + jedno zapytanie dla każdego duplikatu (sprawdzające czy jest pierwszym/ostatnim elementem z grupy) + jedno zapytanie wyświetlające całą grupę (gdy już znajdziemy ten pierwszy/ostatni element), więc powiedzmy że na 40 rekordów (jedną stronę) gdzie może być tak z 10-20 duplikatów, wysyłane jest tak na oko 13-23 zapytania, nie ma co najefektywniejsze to to nie jest wersję rozwiązaną całkowicie w mysqlu wolał bym też ponieważ wygodniejsze by było podczas robienie stronicowania EDIT: myślałem troche nad tym zapytaniem i powiem że gdybym tylko znał sql troche bardziej to dało by rade to zrobić mam taki kod:
wiem że to powyżej nie zadziała, ale gdyby mi sie tylko udało wstawić zamiast (SELECT max(date) FROM materialy WHERE materialy.duplikat = duplikat) maksymalną datę z grupy wpisów gdzie pole DUPLIKAT równe jest polu DUPLIKAT aktualnie przetwarzanego wpisu ( WHEN duplikat > 0 THEN ... ) wtedy wszystkie duplikaty miały by taką samą datę i można by je ładnie posortować z resztą rekoródw, a one były by wszystkie obok siebie Ten post edytował Dynuel 1.12.2007, 16:40:09 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.08.2025 - 20:15 |