Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL] Zapytanie SELECT i omijanie rekordów [GROU BY]
djpotwosss
post
Post #1





Grupa: Zarejestrowani
Postów: 87
Pomógł: 1
Dołączył: 3.12.2008

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


Witam, mam następujący problem.
Mam bazę danych o strukturze:

name | data1
_________________________
7800 | 2015-07-24 09:57:33
7801 | 2015-07-24 09:59:33
7800 | 2015-07-24 09:55:33
7801 | 2015-07-24 09:51:33

itd rożne rekordy.

Chcę by wyświetlało w kolejności od najnowszej daty, grupująć według nazwy.
Chcę dostać coś takiego:

7801 | 2015-07-24 09:59:33
7800 | 2015-07-24 09:57:33 itd.

Mój problem polega na tym, że MYSQL pomija co drugi rekord prawidłowy. Np w tym przypadku wyświetla mi tylko 7800.. Zapytanie, które stosuje to:
  1. SELECT name, data1 FROM tabela GROUP BY name ORDER BY data1 DESC


Gdy wywale 'GROUP BY' oczywiście wyświetla normalnie, jednak nie grupuje. Jak sobie poradzić z tym GROU BY ?

Ten post edytował djpotwosss 24.07.2015, 15:04:45
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 11)
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


SELECT NAME, MAX(DATA)...


--------------------
Go to the top of the page
+Quote Post
djpotwosss
post
Post #3





Grupa: Zarejestrowani
Postów: 87
Pomógł: 1
Dołączył: 3.12.2008

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


Zapytanie SELECT name, MAX(data1) FROM tabela GROUP BY name ORDER BY data1 DESC nadal nie działa. Co drugie rekordy dalej są omijane.

Ten post edytował djpotwosss 24.07.2015, 15:33:57
Go to the top of the page
+Quote Post
trueblue
post
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Na jakiej podstawie stwierdzasz, że co drugi rekord jest omijany?
Obydwa zapytania nie mają prawa wyrzucić z puli rekordów o name=7801.


--------------------
Go to the top of the page
+Quote Post
djpotwosss
post
Post #5





Grupa: Zarejestrowani
Postów: 87
Pomógł: 1
Dołączył: 3.12.2008

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


Moja tabelka: Obrazek
Po wykonaniu GROUP: Obrazek 2
Go to the top of the page
+Quote Post
trueblue
post
Post #6





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Na obrazku 1 to wszystkie rekordy w tej tabeli?
W kolumnie data1 masz typ DATETIME lub TIMESTAMP?

Ten post edytował trueblue 24.07.2015, 16:39:02


--------------------
Go to the top of the page
+Quote Post
djpotwosss
post
Post #7





Grupa: Zarejestrowani
Postów: 87
Pomógł: 1
Dołączył: 3.12.2008

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


Nie, nie są to wszystkie rekordy. Rekordów mam ponad 7 tysięcy. Używam DATETIME a pole nazwa to int.
Go to the top of the page
+Quote Post
trueblue
post
Post #8





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Proponuję sprawdzić czy rekordy, które podejrzewasz o zniknięcie znajdują się niżej w wyniku niż przewidujesz ich miejsce.


--------------------
Go to the top of the page
+Quote Post
djpotwosss
post
Post #9





Grupa: Zarejestrowani
Postów: 87
Pomógł: 1
Dołączył: 3.12.2008

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


Niestety niżej ich nie ma.. Tak jak wyżej pisałem, rekordy 'giną' gdzieś.. Jak inaczej stworzyć to zapytanie ?
Go to the top of the page
+Quote Post
trueblue
post
Post #10





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Twoje zapytanie nie jest do końca poprawne, ponieważ wybiera "pierwszą lepszą" wartość data1 podczas grupowania. Powinno być zapytanie wybierające MAX(data1).
Jednak pod względem znikania danych obydwa zapytania są poprawne, tj. nie ma możliwości, aby podczas grupowania uciekły wszystkie wartości reprezentujące grupę (tu: 7801).
Proponuję abyś przetestował zapytanie/a na mniejszej liczbie rekordów, np. na 4-ech, które podałeś wyżej.


--------------------
Go to the top of the page
+Quote Post
djpotwosss
post
Post #11





Grupa: Zarejestrowani
Postów: 87
Pomógł: 1
Dołączył: 3.12.2008

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


Gdy w zapytaniu ustawię 'MAX(data1)' oraz 'LIMIT 4' sytuacja występuje tak tamo.. Nadal jest omjany rekord.

Ten post edytował djpotwosss 31.07.2015, 12:08:41
Go to the top of the page
+Quote Post
trueblue
post
Post #12





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Przetestuj na źródle o liczbie 4-ech rekordów, nie ograniczaj wyniku.

Dokładnie na tym:
name | data1
_________________________
7800 | 2015-07-24 09:57:33
7801 | 2015-07-24 09:59:33
7800 | 2015-07-24 09:55:33
7801 | 2015-07-24 09:51:33


--------------------
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 Aktualny czas: 20.08.2025 - 09:23