Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: last() first()
Forum PHP.pl > Forum > Bazy danych > MySQL
psw779
Witam!

Po prostu jestem w szoku,

buduję najprostsze zapytanie w którym chce użyć LAST lub FIRST i nie działa. Wersje serwera nowe, spokojnie powinno chodzić a tu zonk.

SELECT FIRST(galleries.id) FROM galleries

za to np.:

SELECT AVG(galleries.id) FROM galleries

śmiga aż miło.

Ma ktoś jakiś pomysł?
sowiq
blinksmiley.gif A skąd Ty wytrzasnąłeś taką funkcję agregującą jak FIRST() ? Nie ma czegoś takiego... MAX, MIN, AVG, ale FIRST? blinksmiley.gif
psw779
zobacz tutaj:

http://www.w3schools.com/sql/sql_func_first.asp
sowiq
Znajdź mi to w manualu do MySQL, bo to, co podałeś to jakiś Oracle jest (nawet nie napisali) smile.gif W MySQL używa się MAX/MIN i ORDER BY.
phpion
Cytat(psw779 @ 9.02.2009, 23:06:05 ) *

A ty tutaj:
http://bugs.mysql.com/bug.php?id=2020
Cytat
I wonder why there is no FIRST and LAST aggregate functions in MySql. Somebody told me
this impossible because MySql save data in B-tree and returned set is unordered.
Deusx
Serwera OK, ale czy mysql nie jest stare ?
psw779
no dobra, to teraz taka sytuacja:

jak za pomocą np. max wyciągnąć ostatnio dodany wierz na podstawie daty i czasu które są zawarte w dwóch różnych kolumnach?

nie da się przecież do max wsadzić dwóch argumentów (w moim przypadku date and time)
sowiq
Cytat(psw779 @ 9.02.2009, 22:58:00 ) *
jak za pomocą np. max wyciągnąć ostatnio dodany wierz na podstawie daty i czasu które są zawarte w dwóch różnych kolumnach?
Jeśli trzymasz datę w osobnym polu, a godzinę w osobnym, to najpierw polecam jakiś najprostszy kurs projektowania baz danych - nawet pojedynczych tabel.

Jeśli masz np. timestamp/date w polu, to robisz proste:
  1. SELECT * FROM tabela ORDER BY timestamp DESC LIMIT 1
i już masz najświeższy wpis.

Wariant z dwoma polami na datę i godzinę uznam za żart.
psw779
Nie będę teraz przebudowywał komuś całej bazy bo to po prostu nie ma sensu.

A kolega zamiast żartować zastanowił by się poważnie nad rozwiązaniem problemu. Tym bardziej, że przykład który podałem jest tylko podzapytaniem grubszego selecta.
sowiq
W takim razie na pewno masz jakieś ID auto increment. Jeśli nie, to dodanie takiego pola nie zmieni Ci nic w bazie danych i w zapytaniach. Z każdym dodaniem nowego rekordu ID będzie zwiększane o 1, więc znalezienie najnowszego wpisu ograniczy się do znalezienia największego ID.

Dużo masz wpisów w tej tabeli?
psw779
ponad 100 tysięcy,
z id była by prosta sprawa, zresztą ono już tam jest ale oprócz sortowania ja chcę jeszcze wypisać tą datę i czas z tabeli a tu już jest problem. Do tej pory było to realizowane osobnym zapytaniem w pętli php.
sowiq
No to chyba logicznie patrząc od razu widać, że to, co napisałem powyżej da się łatwo zamienić na Twój przypadek:
  1. SELECT * FROM tabela ORDER BY id DESC LIMIT 1
Wykonaj to i będziesz miał wszystkie informacje o najnowszym wpisie.
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.