Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Select max()
Forum PHP.pl > Forum > Przedszkole
8_pasarzer_NOSTROMO
Witam

Sprawa powinna być prosta ale ja nie potrafię sobie z nią poradzić. Wiem, że zaraz połowa forum mnie zbluzga ale nie potrafię tego zrobić i dlatego proszę o pomoc.

Oto moja baza danych




Chciałbym pobrać te wartości z kolumny "dane", które zawierają najświeższą datę. Czyli dla tego przykładu te z id=4,5,6,8. Jak to uczynić. Najbardziej bym prosił o gotowe rozwiązanie.

Litości.
MateuszS
SELECT * FROM `wstep_wp` ORDER BY `id` LIMIT 4;

sprobuj tak, powinno wyswietlic 4 ostatnio dodane
Fifi209
ORDER BY - całe rozwiązanie.

@edit
Cytat(MateuszScirka @ 5.11.2009, 20:48:45 ) *
SELECT * FROM `wstep_wp` ORDER BY `id` LIMIT 4;

sprobuj tak, powinno wyswietlic 4 ostatnio dodane

Równie dobrze, można po dacie sortować.
8_pasarzer_NOSTROMO
Napisałeś tak :

SELECT * FROM `wstep_wp` ORDER BY `id` LIMIT 4;

4 - ponieważ widać cztery

Ale ja nigdy nie będę wiedział ile ich jest rzeczywiście. Chciałbym aby pobrał tylko te które są z najświeższą datą. Czasem bedzie ich 1 czasem 9, ale żeby zawsze pobrał tylko te z najświeższą data.


Także w pytaniu nie może być cyfry bo jej nie bede znał.
MateuszS
najswiezszy jest jeden - ten ostatni. Jakimi kategoriami okreslasz te "najswiezsze"? Tego samego dnia? Z tego samego tygodnia?
skowron-line
  1. SELECT * FROM wstep_wp WHERE `data` = current_date

tylko z bierzącego dnia
  1. SELECT * FROM wstep_wp WHERE `data` >= date_sub( current_date, interval 7 day )

najnowsze wieksze od 7 dni wstecz od bierzącej daty.
8_pasarzer_NOSTROMO
Przepraszam za złe nazewnictwo. Masz racje, najświeższy jest jeden ostatni. Chodzi mi o te które mają najwyższą datę, najbliższą dziś. Chciałbym pobrać tylko te które maja tą samą i zarazem najbliższą dacie dzisiejszej date. Dodam że daty w polu "data" zawsze bedą mniejsze niż dziś. pomóż brachu
skowron-line
Cytat(8_pasarzer_NOSTROMO @ 5.11.2009, 21:36:13 ) *
Dodam że daty w polu "data" zawsze bedą mniejsze niż dziś. pomóż brachu

  1. SELECT * FROM wstep_wp WHERE `data` >= date_sub( current_date, interval 1 day )
8_pasarzer_NOSTROMO
Cytat(skowron-line @ 5.11.2009, 21:37:34 ) *
  1. SELECT * FROM wstep_wp WHERE `data` >= date_sub( current_date, interval 1 day )



skowron-line dziki za pomoc. A powiedz mi jeszcze co będzie, gdy dziś będzie np. 06.11.2009 a w bazie ostatnia data (najświeższa) będzie np. 03.09.2009. Jak wtedy pobrać ? Rozumie że opcja z "1 day" odpada.
skowron-line
Cytat(8_pasarzer_NOSTROMO @ 5.11.2009, 22:09:58 ) *
skowron-line dziki za pomoc. A powiedz mi jeszcze co będzie, gdy dziś będzie np. 06.11.2009 a w bazie ostatnia data (najświeższa) będzie np. 03.09.2009. Jak wtedy pobrać ? Rozumie że opcja z "1 day" odpada.

smile.gif Mój błąd
  1. SELECT * FROM wstep_wp WHERE `data` < current_date LIMIT 1

no ale to samo można osiągnąć sortując po dacie z limit 1.
8_pasarzer_NOSTROMO
Witam ponownie, z przykrością stwierdzam ze żaden z przykładów nie działa. Jeszcze raz napisze o co mi chodzi. Chciałbym pobrać z bazy te wiersze w których jest (ta sama i najbliższa dzisiejszej data). Musi być ta sama i najbliższa dzisiejszej. Dodam od razu że nie wiemy ile bedzie wyników więc propozycje typu np. "limit 4" lub "day 7" odpadaja. Ile będzie wyników i jaka jest data najblizsza dzisiejszej = TEGO NIKT NIE WIE, wiec wkładanie ich do zapytania odpada.


Przykład
nazwa tabeli - wstep_wp

kolumny
ID DANE DATA
1 cos tam 04.04.2009
2 cos tam 05.04.2009
3. cos tam 10.10.2009
4. cos tam 10.10.2009


Chce pobrać te 2 ostatnie (nie wiedząc ze jest ich 2) bo nie bede wchodził przecież do bazy żeby zliczyć i w pytanie wstawić.
Chrom
dokładnie nie wiem czy to da zamierzony efekt, ale może ten przykład naprowadzi kogoś na forum

  1. "SELECT MAX(data) FROM wstep_wp WHERE `data` < current_date"

phpion
  1. SELECT * FROM wstep_wp WHERE `data` = (SELECT MAX(`data`) FROM wstep_wp) ORDER BY id DESC


* powyższe zadziała jeśli pole `data` jest typu DATE, a nie tekstowego (np. VARCHAR).
8_pasarzer_NOSTROMO
Cytat(Chrom @ 6.11.2009, 09:49:47 ) *
  1. "SELECT MAX(data) FROM wstep_wp WHERE `data` < current_date"



Tylko jak teraz wypisać dane z kolumny dane, skoro pobiera tylko z kolumny data ?
phpion
Spójrz na moje zapytanie.
8_pasarzer_NOSTROMO
@ phpion

Błędne zapytanie mi wyskakuje a napisałem tak :

SELECT * FROM wstep_wp WHERE data = (SELECT MAX(data) FROM wstep_wp) ORDER BY id DESC
phpion
Może podaj błąd jaki otrzymujesz? Pewnie chodzi o brak ucieczki na polu data. Zamiast data podawaj `data` (tak jak ja napisałem).
8_pasarzer_NOSTROMO
Mam tak:

include "baza.php";
$zapytanie = "SELECT * FROM wstep_wp WHERE data = (select max(data) FROM wstep_wp)";
$wykonaj = mysql_query($zapytanie) or die ("<BR>Zapytanie bazy uzyt"); <------------------- wywala ten błąd z opisu
mysql_close($link);

while($wiersz = mysql_fetch_array($wykonaj))
{
$data[]=$wiersz['data'];
};
mysql_free_result($wykonaj);

for($x=0;$x<count($data);$x++)
{
print $data[$x];
}

Stoi na początku, wywala "Zapytanie bazy uzyt"
phpion
  1. $wykonaj = mysql_query($zapytanie) or die (mysql_error());

i po raz 2 Ci mówię: ESCAPUJ KOLUMNĘ DATA! Czyli nie:
  1. $zapytanie = "SELECT * FROM wstep_wp WHERE data = (select max(data) FROM wstep_wp)";

tylko:
  1. $zapytanie = "SELECT * FROM wstep_wp WHERE `data` = (select max(`data`) FROM wstep_wp)";
8_pasarzer_NOSTROMO
Naprawde próbowałem już 10x. pisałem tak : (data) i tak (`data`) i tak ('data') i tak ("data"). Próbowałem chyba wszystkie znaki z klawiatury (nie no żartuje). Ciagle to samo. Skopiowałem na żywca co napisałeś i dalej to samo. Matoł nie jestem.



nospor
nie: $wykonaj = mysql_query($zapytanie) or die ("<BR>Zapytanie bazy uzyt");
a: $wykonaj = mysql_query($zapytanie) or die (mysql_error());
Wowczas dopiero dowiesz sie jaki masz blad.

edit down: widać nie "doczytał". Jak nie "doczyta" i teraz to inaczej z nim pogadamy winksmiley.jpg
phpion
Cytat(8_pasarzer_NOSTROMO @ 6.11.2009, 12:22:11 ) *
Skopiowałem na żywca co napisałeś i dalej to samo. Matoł nie jestem.

No popatrz, a ja przed chwilą założyłem tabelę z identyczną strukturą, wklepałem do niej przykładowe dane i zapytanie o dziwo jednak działa... Magia?

@nospor:
To samo koledze wcześniej napisałem...
8_pasarzer_NOSTROMO
Something is wrong in your syntax obok 'select max(`data`) FROM wstep_wp)' w linii 1

Takie cos wywaliło.

Przepraszam za moje niedbalstwo i niewiedzę.
nospor
i po sprawie... pewnie uzywasz krasnala a w nim siedzi jeszcze stare mysql 3 cos tam.
Weź zainstaluj trochę bardziej aktualne mysql winksmiley.jpg
8_pasarzer_NOSTROMO
Udało mi się po swojemu. Podaje rozwiązanie, może się komuś przyda (np. potomnym) :-)

Najpierw pobrałem maksymalna date (najbliższą dziś) :

include "baza.php";
$zapytanie = "select max(data) FROM wstep_wp";
$wykonaj = mysql_query($zapytanie) or die ("<BR>Błędne zapytanie bazy wstep_wp");
while($wiersz = mysql_fetch_array($wykonaj))
{$max_data=$wiersz['0'];};
mysql_close($link);


następnie pobrałem wszystkie pola, które w polu data mają (maksymalną pobraną wyżej date)

include "baza.php";
$zapytanie = "SELECT * FROM wstep_wp where (data='$max_data')";
$wykonaj = mysql_query($zapytanie) or die ("<BR>Zapytanie bazy wstep_wp");
mysql_close($link);
while($wiersz = mysql_fetch_array($wykonaj))
{$dane[]=$wiersz['dane'];};


pętelka

for($x=0;$x<count($dane);$x++)
{
print $dane[$x]
}


I koniec. mamy wypisane te pola w których jest data najbliższa dziś.

Pozdro dla wszystkich i dzieki za pomoc. Fakt sam na to wpadłem ale bez Waszej pomocy by mnie nie olśniło. Pewnie znajdzie się mądy, który napisze wszystko w jednej lini kodu. Wiec poozdro dla mądrych tego świata i ich rodzin.

nospor
po pierwsze: zacznij uzywać bbcode
po drugie: dla Twojego dobra zainstaluj sobie jednak aktualną wersje bazy danych. Właśnie wyrabiasz w sobie złe nawyki i kod co można zrobić jednym prostym zapytaniem rozbijasz na dwa.
phpion
Poza tym: po co po każdym zapytaniu zamykasz połączenie z bazą danych tylko po to aby za chwilę nawiązać je ponownie?

include "baza.php"; - zakładam, że nawiązuje połączenie
mysql_close($link); - zamyka połączenie
thek
Na upartego jeśli już nie jesteś pewien czy się połączyłeś z bazą to może używaj include_once? winksmiley.jpg
8_pasarzer_NOSTROMO
Cytat(nospor @ 6.11.2009, 11:13:28 ) *
po pierwsze: zacznij uzywać bbcode
po drugie: dla Twojego dobra zainstaluj sobie jednak aktualną wersje bazy danych. Właśnie wyrabiasz w sobie złe nawyki i kod co można zrobić jednym prostym zapytaniem rozbijasz na dwa.



@ nospor

Sorki że nie używałem bbcode. A mam do Ciebie prośbę. Czy mógłbyś, to co napisałem w 2 pytaniach zamienić mi na jedno. Nie potrafie stworzyć jednego pytania a wiem, że sobie utrudniam i nie potrzebnie tworze nowe linie kodu. Jakbyś mi zamienił moje 2 w 1 to na pewno bym to przeanalizował i wiecej tego nie robił.

Co do nowego mysql. Wiem że są nowsze, ja jade na krasnalu bo w pracy mam krasnala i chce żeby było to samo u mnie co w pracy. Próbowałem kiedyś WebServ czy jakoś tak, wszystko super ale nie umiałem zrobić polskiej czcionki, wyskakiwały mi jakies drzewa. No ale to już nie jest na temat wątku. Kiedyś jak dorosne do tego to zaś spróbuje.
nospor
Cytat
Czy mógłbyś, to co napisałem w 2 pytaniach zamienić mi na jedno
No przeciez phpion juz ci podal wczesniej jak to zrobic jednym zapytaniem. Do tego jednak jest potrzebne mysql 4.x w zwyz. Dlatego ci pisalem byś sobie zakutalizowal.
No ale skoro w pracy masz stare i zakladam ze ten kod ci jest potrzebny do pracy siedź na czym siedzisz.
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.