8_pasarzer_NOSTROMO
5.11.2009, 20:40:41
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
5.11.2009, 20:48:45
SELECT * FROM `wstep_wp` ORDER BY `id` LIMIT 4;
sprobuj tak, powinno wyswietlic 4 ostatnio dodane
Fifi209
5.11.2009, 20:49:16
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
5.11.2009, 21:02:56
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
5.11.2009, 21:23:46
najswiezszy jest jeden - ten ostatni. Jakimi kategoriami okreslasz te "najswiezsze"? Tego samego dnia? Z tego samego tygodnia?
skowron-line
5.11.2009, 21:34:12
SELECT * FROM wstep_wp WHERE `data` = current_date
tylko z bierzącego dnia
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
5.11.2009, 21:36:13
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
5.11.2009, 21:37:34
Cytat(8_pasarzer_NOSTROMO @ 5.11.2009, 21:36:13 )

Dodam że daty w polu "data" zawsze bedą mniejsze niż dziś. pomóż brachu
SELECT * FROM wstep_wp WHERE `data` >= date_sub( current_date, interval 1 day )
8_pasarzer_NOSTROMO
5.11.2009, 22:09:58
Cytat(skowron-line @ 5.11.2009, 21:37:34 )

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
5.11.2009, 22:11:47
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.

Mój błąd
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
6.11.2009, 09:18:42
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
6.11.2009, 09:49:47
dokładnie nie wiem czy to da zamierzony efekt, ale może ten przykład naprowadzi kogoś na forum
"SELECT MAX(data) FROM wstep_wp WHERE `data` < current_date"
phpion
6.11.2009, 09:56:00
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
6.11.2009, 09:59:04
Cytat(Chrom @ 6.11.2009, 09:49:47 )

"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
6.11.2009, 10:03:49
Spójrz na moje zapytanie.
8_pasarzer_NOSTROMO
6.11.2009, 10:06:33
@ 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
6.11.2009, 10:08:40
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
6.11.2009, 10:13:19
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
6.11.2009, 10:19:00
i po raz 2 Ci mówię: ESCAPUJ KOLUMNĘ DATA! Czyli nie:
$zapytanie = "SELECT * FROM wstep_wp WHERE data = (select max(data) FROM wstep_wp)";
tylko:
$zapytanie = "SELECT * FROM wstep_wp WHERE `data` = (select max(`data`) FROM wstep_wp)";
8_pasarzer_NOSTROMO
6.11.2009, 10:22:11
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
6.11.2009, 10:24:40
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
phpion
6.11.2009, 10:25:35
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
6.11.2009, 10:28:32
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
6.11.2009, 10:29:42
i po sprawie... pewnie uzywasz krasnala a w nim siedzi jeszcze stare mysql 3 cos tam.
Weź zainstaluj trochę bardziej aktualne mysql
8_pasarzer_NOSTROMO
6.11.2009, 11:08:54
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
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.
phpion
6.11.2009, 11:16:44
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
Na upartego jeśli już nie jesteś pewien czy się połączyłeś z bazą to może używaj include_once?
8_pasarzer_NOSTROMO
6.11.2009, 14:17:24
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
6.11.2009, 14:20:35
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.