Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] Zapytanie SELECT i omijanie rekordów [GROU BY]
Forum PHP.pl > Forum > Przedszkole
djpotwosss
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 ?
trueblue
SELECT NAME, MAX(DATA)...
djpotwosss
Zapytanie SELECT name, MAX(data1) FROM tabela GROUP BY name ORDER BY data1 DESC nadal nie działa. Co drugie rekordy dalej są omijane.
trueblue
Na jakiej podstawie stwierdzasz, że co drugi rekord jest omijany?
Obydwa zapytania nie mają prawa wyrzucić z puli rekordów o name=7801.
djpotwosss
Moja tabelka: Obrazek
Po wykonaniu GROUP: Obrazek 2
trueblue
Na obrazku 1 to wszystkie rekordy w tej tabeli?
W kolumnie data1 masz typ DATETIME lub TIMESTAMP?
djpotwosss
Nie, nie są to wszystkie rekordy. Rekordów mam ponad 7 tysięcy. Używam DATETIME a pole nazwa to int.
trueblue
Proponuję sprawdzić czy rekordy, które podejrzewasz o zniknięcie znajdują się niżej w wyniku niż przewidujesz ich miejsce.
djpotwosss
Niestety niżej ich nie ma.. Tak jak wyżej pisałem, rekordy 'giną' gdzieś.. Jak inaczej stworzyć to zapytanie ?
trueblue
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.
djpotwosss
Gdy w zapytaniu ustawię 'MAX(data1)' oraz 'LIMIT 4' sytuacja występuje tak tamo.. Nadal jest omjany rekord.
trueblue
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.