Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL] Jak wyciągnąć ostatni rekord
Forum PHP.pl > Forum > Przedszkole
tryme
Witam,

Jak najszybciej można wyciągnąć ostatni rekord z takiej pętli:
  1. <?php
  2. while ($dane=mysql_fetch_array($pytanie))
  3.    echo $dane['cos tam'];
  4.  
  5. .....
  6.  
  7. echo $dane['cos tam']; (tutaj chciałbym wykorzystać ostatni rekord)
  8. ?>


Do głowy przychodzi mi tylko coś takiego
  1. <?php
  2. while ($dane=mysql_fetch_array($pytanie))
  3. {
  4.    echo $dane['cos tam'];
  5.  
  6.        $ostatni = $dane['cos tam'];
  7. }
  8. ?>

ale liczę na to, że można to zrobić lepiej winksmiley.jpg
Spawnm
w $zapytanie poproś o pobranie ostatniego rekordu smile.gif
czyli np $zapytanie= "SELECT * FROM table ORDER BY id DESC LIMIT 1";
tryme
Spawnm zależy mi na jak najmniejszej ilości zapytań do bazy, więc ta opcja odpada.
piotrooo89
zapytania po stronie serwera SQL są najszybsze. poczytaj o MAX(). jeśli masz indexy na kolumnie będzie ślicznie hulać.
Foxx
Jak już coś to raczej:
  1. <?php
  2. while ($dane=mysql_fetch_array($pytanie))
  3. {
  4.   $ostatni = $dane['cos tam'];
  5. }
  6. echo $ostatni;
  7. ?>

Ale to bez sensu.
Skoro koniecznie potrzebujesz całej listy rekordów to przede wszystkim musisz ładować je do jakieś tablicy.
  1. <?php
  2. while ($dane=mysql_fetch_array($pytanie))
  3. {
  4.   $tablica[] = $dane['cos tam'];
  5. }
  6. ?>


A co do ostatniej wartości to może array_pop" title="Zobacz w manualu PHP" target="_manual
piotrooo89
Cytat(Foxx @ 18.02.2009, 20:10:17 ) *
Skoro koniecznie potrzebujesz całej listy rekordów to przede wszystkim musisz ładować je do jakieś tablicy.
(...)
A co do ostatniej wartości to może array_pop" title="Zobacz w manualu PHP" target="_manual


wydaje mi się że jest to strzelanie do muchy z armaty. robi sobie zapytanie z MAX(). i później do zmiennej wrzuca tablice mysql'a.

pseudo kod:
  1. <?php
  2. $sql = SELECT MAX(id) FROM tabela;
  3. $ost = mysql_fetch_array($sql);
  4.  
  5. echo $ost['cos tam'];
  6. ?>


nie prościej?
tryme
Cytat(piotrooo89 @ 18.02.2009, 20:07:55 ) *
zapytania po stronie serwera SQL są najszybsze. poczytaj o MAX(). jeśli masz indexy na kolumnie będzie ślicznie hulać.

Nie będę się z tym sprzeczał, ale skoro już raz o to zapytałem do IMHO bez sensu pytać o to drugi raz.

Cytat(Foxx @ 18.02.2009, 20:10:17 ) *
Jak już coś to raczej:


Zapis
  1. <?php
  2. while ($dane=mysql_fetch_array($pytanie))
  3. {
  4.   echo $dane['cos tam'];
  5.  
  6.   $ostatni = $dane['cos tam'];
  7. }
  8. ?>

działa. Tzn. wyświetli mi wszystkie dane a następnie mam możliwość wykorzystanie ostatniej w dowolnymi miejscu skryptu jako $ostatni.

Co do "całej listy rekordów to przede wszystkim musisz ładować je do jakieś tablicy" nie potrzebuję jej tylko ten ostatni rekord a nie całą tablicę smile.gif
Foxx
piotrooo89 oczywiście, że prościej i szybciej, ale założyłem, że tryme potrzebuje całej listy rekordów i jeżeli dobrze rozumiem
Cytat
działa. Tzn. wyświetli mi wszystkie dane a następnie mam możliwość (...)
to tak właśnie jest.
erix
Cytat
że prościej i szybciej, ale założyłem, że tryme potrzebuje

To wtedy inaczej: do całego zapytania trzeba dopisać SQL_CALC_FOUND_ROWS i skorzystać z mysql_data_seek" title="Zobacz w manualu PHP" target="_manual. Tym pierwszym pobierzesz bezboleśnie liczbę rekordów, wspomnianą funkcją przesuniesz się w wynikach:
  1. <?php
  2. $q = mysql_query('SELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE cond');
  3. $cnt = mysql_query('SELECT FOUND_ROWS()');
  4. $cnt = mysql_fetch_row($cnt);
  5.  
  6. mysql_data_seek($q, $cnt[0]-1);
  7. ?>

pisane na kolanie, jak coś.
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.