![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 186 Pomógł: 9 Dołączył: 3.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
Czy istenieje możliwość pogrupowania wyników z tabeli w taki sposób, że jeśli jest więcej takich samych to pokazuje drugi wynik a nie pierwszy czy ostatni? Tabela: Nazwa------------data--------------numer krzysztof------2012-12-11-----------7 Adam------------2012-12-10------------7 Adam------------2012-10-10------------7 Adam------------2012-5-10------------4 group by numer numer ASC Czy dam ASC czy DESC to i tak pokazuje wynik z brzegu albo pierwszy albo ostatni jak wyciągnąć wynik 2 od góry? Na początku robiłem dwa osobne zapytania które grupowały a potem szukały drugiego wyniku przez LIMIT 1,1 lecz to nie sprawdza się bo potrzebuję wyświetlić kilka wyników w pętli a to moje pierwsze działało przy jednym wyniku. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 279 Pomógł: 36 Dołączył: 1.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
A koniecznie musi to być zapytanie? Z pętlą nie byłoby problemu - wyświetlałbyś sumę wszystkich rekordów i pomijał te które chcesz.
|
|
|
![]()
Post
#3
|
|
Grupa: Opiekunowie Postów: 3 855 Pomógł: 317 Dołączył: 4.01.2005 Skąd: że ![]() |
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 186 Pomógł: 9 Dołączył: 3.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
A koniecznie musi to być zapytanie? Z pętlą nie byłoby problemu - wyświetlałbyś sumę wszystkich rekordów i pomijał te które chcesz. I tak właśnie zrobiłem przez pętle, lecz to nie jest zbyt optymalne, w jednym zapytaniu byłoby to lepsze i szybsze ale trzeba sobie jakoś radzić (IMG:style_emoticons/default/smile.gif) ważne że działa tak jak chce. Jakby ktoś miał jakiś pomysł to może coś wymyśli jak to rozwiązać w jednym zapytaniu, próbowałem podzapytania zrobić ale się pogubiłem i nic z tego nie wyszło. Pozdrawiam. Nie do końca rozumiem, co chcesz osiągnąć.
Mam w tabeli dane jakiegoś gościa jest w niej imie, data, nr, tresc, wyświetlam wszystkie dane z bazy i grupuje je według kolumny nr nastepnie sortuje kolejno imie ASC, nr ASC Wynik ładnie pięknie pokazuje wszystkie wiersze bez powtórzeń: nr tylko, że pokazuje ostatni wiersz z grupowanej kolumny: Krzysztof-------------5---------------treść1 -> po zmianie nr DESC pokazuje ten wynik Krzysztof-------------5---------------treść2 -> chcę aby po grupowaniu pokazywało ten wynik zawsze drugi od góry (w jednym zapytaniu to robię nr = '5' ORDER BY data ASC Krzysztof-------------5---------------treść3 Krzysztof-------------5---------------treść4 Krzysztof-------------5---------------treść5 -> po grupowaniu pokazuje ten wynik |
|
|
![]()
Post
#5
|
|
Grupa: Opiekunowie Postów: 3 855 Pomógł: 317 Dołączył: 4.01.2005 Skąd: że ![]() |
Pokaż zapytanie...
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 186 Pomógł: 9 Dołączył: 3.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Kod SELECT * FROM tabela group by nr ORDER BY `data` ASC 1wiersz--------nr2-------| 2wiersz--------nr2-------| Po grupowaniu pokazuje 1wiersz lub 3 wiersz (czyli pierszy albo ostatni) a jak wyciągnąć z grupowania ten 2wiersz? 3wiersz--------nr2-------| |
|
|
![]()
Post
#7
|
|
Grupa: Opiekunowie Postów: 3 855 Pomógł: 317 Dołączył: 4.01.2005 Skąd: że ![]() |
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 186 Pomógł: 9 Dołączył: 3.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Tak tylko że pokaże drugi rekord z 3, tak? TYlko że jak mam w tabeli: 1wiersz---------nr2------------tresc1gsdfgsdfg 2wiersz---------nr2------------tresc12sfdgsf -> Grupowanie pokazuje ten wynik 3wiersz---------nr4------------tresc14sfdg 4wiersz---------nr2------------tresc13gsfdg 5wiersz---------nr4------------tresc24sfgsf -> Grupowanie pokazuje ten wynik 6wiersz---------nr2------------tresc14sfg 7wiersz---------nr5------------tresc134sfdg 8wiersz---------nr5------------tresc1qesdfsdf -> Grupowanie pokazuje ten wynik Czyli wyświetli: 2wiersz, 5wiersz, 8wiersz |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Zapytanie masz do dupy.
NIE WOLNO dawać * w połączeniu z GROUP BY. Zwłaszcza, że nie grupujesz po polu unikalnym |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 186 Pomógł: 9 Dołączył: 3.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Zapytanie masz do dupy. NIE WOLNO dawać * w połączeniu z GROUP BY. Zwłaszcza, że nie grupujesz po polu unikalnym To nawet jak nie dam tego * to jak zrobić aby rozwiązać mój problem? Grupowanie działa i wyświetla prawidłowo tylko chce wyciągnąć jak pisałem wyżej 2 wynik z grupy. Jak mam 30 takich samych wyników to grupuje do jednego i wyświetla pierwszy lub ostatni wiersz z grupy. Rozwiązałem ten problem i działa jak chce tylko jako w 2 zapytaniach i z wykorzystaniem pętli. |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Jak mam 30 takich samych wyników to grupuje do jednego i wyświetla pierwszy lub ostatni wiersz z grupy. Przypadek... Cytat za manualem: Cytat 12.11.3. GROUP BY and HAVING with Hidden Fields MySQL extends the use of GROUP BY so that you can use non-aggregated columns or calculations in the SELECT list that do not appear in the GROUP BY clause. You can use this feature to get better performance by avoiding unnecessary column sorting and grouping. For example, you do not need to group on customer.name in the following query: SELECT order.custid, customer.name, MAX(payments) FROM order,customer WHERE order.custid = customer.custid GROUP BY order.custid; In standard SQL, you would have to add customer.name to the GROUP BY clause. In MySQL, the name is redundant. Do not use this feature if the columns you omit from the GROUP BY part are not constant in the group. The server is free to return any value from the group, so the results are indeterminate unless all values are the same. A similar MySQL extension applies to the HAVING clause. The SQL standard does not allow the HAVING clause to name any column that is not found in the GROUP BY clause if it is not enclosed in an aggregate function. MySQL allows the use of such columns to simplify calculations. This extension assumes that the non-grouped columns will have the same group-wise values. Otherwise, the result is indeterminate. Popraw zapytanie, aby było prawidłowe, to ci potem pomogę. |
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 186 Pomógł: 9 Dołączył: 3.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Przypadek... Cytat za manualem: Popraw zapytanie, aby było prawidłowe, to ci potem pomogę. OK, posiedzę nad tym (IMG:style_emoticons/default/smile.gif) Pierwsze proste zapytanie które grupuje pole numer
Zapytanie z manuala:
Działa, tylko, że jak to ma się do tego fragmentu "SELECT order.custid, customer.name" to są dwie osobne tabele? jak to interpretować? I co dalej z tym zrobić, rozumiem, że te MAX po coś tu jest i trzeba go gdzieś wykorzystać dalej. Będę potrzebował jeszcze HAVING? |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Havinga chyba nie będziesz potrzebować. Having to taki WHERE, ale na zapytaniach agregujących (na ich wynikach)
Prawie idealnie...
Poprawki: 1. Nadane aliasy na tabelę i jedno pole 2. dodane drugie pole do grupowania (zgodnie z manualem, który poprzednio wkleiłem nie może być inncyh pól niż te wymienione w GROUP BY + agregaty) 3. Wywaliłem WHERE, bo było idiotyczne i teraz masz wyniki 1 Adam 7 2 Olaf 3 3 Ela 7 4 Ada 4 Jeśli chcesz je posortować malejąco wg 3 kolumny (max_numer), to na końcu zapytania dodajesz: ORDER BY 3 DESC 1 Adam 7 3 Ela 7 4 Ada 4 2 Olaf 3 Co dalej chcesz zrobić nie wiem... |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 17.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
Cudo optymalizacji to to nie jest ale chyba wykonuje to co chciales:
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
Ale jest źle...
Wiersze 7-11. Masz grupowanie po result, którego nie ma w SELECT, za to jest ID, którego nie ma w GROUP BY. I po co tam sortowanie? Bez sensu... Ten post edytował mmmmmmm 20.12.2012, 14:53:18 |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 23 Pomógł: 0 Dołączył: 17.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
poprostu zamien nazwy kolumn, z sortowaniem masz racje nie sa potrzebne, byly tylko w celach pomocowych przed grupowaniem..
|
|
|
![]()
Post
#17
|
|
Grupa: Zarejestrowani Postów: 186 Pomógł: 9 Dołączył: 3.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
Nie było mnie ostatnio na kompie, patrze na te przykłady i sprawdzam ale to nie działa jak bym chciał.
Może opisze dokładniej o co mi chodzi z tymi wynikami. ------------------------------------------------------------ id--------------personalia------------nr-------------adres-------------------email------------------tel----------------tresc--------------------------- 10--------------Krzysztof------------PP 777--------ul. adresowa-----------email@email---------888888----------Tresc nr 1-----------------------pokazuje ten 9--------------Krzysztof------------PP 777--------ul. adresowa-----------email@email---------888888----------Tresc nr 2-----------------------chce aby pokazywalo ten drugi 8--------------Krzysztof------------PP 777--------ul. adresowa-----------email@email---------888888----------Tresc nr 1----------------------- 7--------------Krzysztof------------PP 777--------ul. adresowa-----------email@email---------888888----------Tresc nr 2----------------------- 6--------------Krzysztof------------PP 777--------ul. adresowa-----------email@email---------888888----------Tresc nr 1----------------------- 5--------------Dominik------------PP 1111--------ul. adresowa11-------------------------------888888----------Tresc ppp-----------------------pokazuje ten 4--------------Dominik------------PP 1111--------ul. adresowa11-------------------------------888888----------Tresc kkk-----------------------chce aby pokazywalo ten drugi 3--------------Dominik------------PP 1111--------ul. adresowa11-------------------------------888888----------Tresc ppp----------------------- 2--------------Dominik------------PP 1111--------ul. adresowa11-------------------------------888888----------Tresc kkk----------------------- 1--------------Dominik------------PP 1111--------ul. adresowa11-----------------------------888888----------Tresc ppp----------------------- Grupuje przez kolumne nr Wynik wyświetla mi 10--------------Krzysztof------------PP 777--------ul. adresowa-----------email@email---------888888----------Tresc nr 1----------------------- 5--------------Dominik------------PP 1111--------ul. adresowa11-------------------------------888888----------Tresc ppp----------------------- Chciałbym uzyskać wynik 9--------------Krzysztof------------PP 777--------ul. adresowa-----------email@email---------888888----------Tresc nr 2----------------------- 4--------------Dominik------------PP 1111--------ul. adresowa11-------------------------------888888----------Tresc kkk----------------------- Głównie chodzi o kolumne tresc aby pokazywało wynik który dodano do bazy o jeden wcześniej Chce mieć też wszystkie dostępne kolumny do wyświetlania wyniku. taki pogladowy kod: while(....) { echo ' Imię: Krzysztof $wiersz['personalia']; Nr: PP 777 $wiersz['nr']; Adres: ul. adresowa $wiersz['adres']; email: email@email $wiersz['email']; tel: 888888 $wiersz['tel']; tresc: Tresc nr 2 $wiersz['tresc']; '; } |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 08:58 |