Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak wyciagnac najwieksza wartosc? ; auto_increment
Forum PHP.pl > Forum > Bazy danych > MySQL
invx
mam kilka problemow, ale zeby nie mnozyc tematow (bo moderatorzy wrazliwi smile.gif) to napisze je w jednym temacie:
1. Jak wyciagnac z bazy MYSQL z pola wiersz z najwieksza wartoscia pola id.
2. Jak wyciagnac z bazy kolejna wartosc, auto_incrementu, zeby to potem uzyc w zapytaniu i zapisac pod polem np id2, czy da sie to wyciagnac w jednym zapytaniu, w tym samym, w ktorym nastepuje zapis ? bo inaczej to wiem jak winksmiley.jpg
3. Czy moze sie zdarzyc ze baza jako nastepny numer auto_incrementacji da el. nie kolejny, tylko jesli bedzie dziura to da wczesniejszy. Zeby lepiej opisac mam pola id z numerami "1 2 3 4 5 8 9 11" i czy baza na 100% jako nastepny auto_incremet da 12 czy moze jej odbije winksmiley.jpg i da np. 7
mhs
1)
  1. SELECT MAX(nazwaPola)
  2. FROM tabela;


2)
a) zobacz na odpowiedz trzecia, zobacz na pierwsza i dodaj 1
cool.gif jest cos takiego jak (moze Ci sie przyda) (dzieki niej pobierasz id ostatnio dodanego rekordu do bazy danych):
  1. SELECT LAST_INSERT_ID();

lub w php funkcja:
mysqli_insert_id()" title="Zobacz w manualu PHP" target="_manual
czyli np. zapytaniem powinienes pobrac nastepne id tak:
  1. SELECT LAST_INSERT_ID() + 1 AS next_id;


Przy czym za bardzo nie rozumiem co Ty chesz zrobić.

3) Nie.
invx
nie dziala sad.gif
robie to tak
  1. <?php
  2.  
  3. $zapytanie4=&#092;"SELECT MAX(id) FROM forum_c WHERE id_='1'\";
  4. $wykonaj4=mysql_query($zapytanie4);
  5. while( $users4=mysql_fetch_array($wykonaj4) );
  6. echo&#092;"$users4\";
  7.  
  8. ?>

i nic sie nie wyswietla
gdaq
1)
  1. SELECT id
  2. FROM tabela ORDER BY id DESC LIMIT 1
jest wydajniejsze od pomyslu mhs'a
2) zalezy jaka masz wersje MySQL'a
Vertical
1)
  1. SELECT MAX(id) AS max_id
  2. FROM tabela
mhs
Cytat(gdaq @ 2005-01-02 20:40:11)
1)
  1. SELECT id
  2. FROM tabela ORDER BY id DESC LIMIT 1
jest wydajniejsze od pomyslu mhs'a

czy aby na pewno? Niestety kilka dni temu pozbylem sie 5 milionowej bazy danych MySQL z mojego dysku i nie moge sprawdzic w tej chwli ktore z zapytan byloby szybciej wykonywane.

Jendak sprawdzilem jak to PostgreSQL

Kod
michal=# EXPLAIN SELECT MAX(id) FROM TEST;
                        QUERY PLAN
-----------------------------------------------------------
Aggregate  (cost=1.97..1.97 rows=1 width=4)
   ->  Seq Scan on test  (cost=0.00..1.77 rows=77 width=4)
(2 rows)

michal=# EXPLAIN SELECT id FROM test ORDER BY id DESC LIMIT 1;
                           QUERY PLAN
----------------------------------------------------------------
Limit  (cost=4.18..4.19 rows=1 width=4)
   ->  Sort  (cost=4.18..4.38 rows=77 width=4)
         Sort Key: id
         ->  Seq Scan on test  (cost=0.00..1.77 rows=77 width=4)
(4 rows)

michal=#


czy nie oznacza to, ze wykorzystanie MAX(id) jest szybsze?
invx
kurcze nie dziala cos:
mam taki kod:
  1. <?php
  2.  
  3. $zapytanie4=&#092;"SELECT MAX(id) FROM forum_c WHERE id_='1'\";
  4. $wykonaj4=mysql_query($zapytanie4);
  5. $users4=mysql_fetch_array($wykonaj4);
  6. echo&#092;"$users4[temat]\";
  7. // kod ten jest wewnatrz petli while wykonujacej inne zapyatnie
  8.  
  9. ?>


i taka mam baze
  1. #
  2. # Struktura tabeli dla `forum_c`
  3. #
  4.  
  5. CREATE TABLE `forum_c` (
  6. `id` int(8) NOT NULL AUTO_INCREMENT,
  7. `id_` int(8) NOT NULL DEFAULT '0',
  8. `id_b` int(8) NOT NULL DEFAULT '0',
  9. `status` int(8) NOT NULL DEFAULT '0',
  10. `autor` varchar(255) NOT NULL DEFAULT '',
  11. `temat` text NOT NULL,
  12. `tresc` text NOT NULL,
  13. `odslony` int(8) NOT NULL DEFAULT '0',
  14. `nowy_temat` int(8) NOT NULL DEFAULT '0',
  15. `html` int(8) NOT NULL DEFAULT '0',
  16. `xcode` int(8) NOT NULL DEFAULT '0',
  17. `emoikony` int(8) NOT NULL DEFAULT '0',
  18. PRIMARY KEY (`id`)
  19. ) TYPE=MyISAM AUTO_INCREMENT=5 ;
  20.  
  21. #
  22. # Zrzut danych tabeli `forum_c`
  23. #
  24.  
  25. INSERT
  26. INTO `forum_c` VALUES (1, 1, 1, 1, '1', 'fffffffff', 'fddddferrerr', 10, 1, 0, 0, 0);
  27. INSERT
  28. INTO `forum_c` VALUES (2, 1, 1, 0, '1', 'ghjgfxg gfh', 'fdyryryeryy ry rty rty y y', 0, 0, 0, 0, 0);
  29. INSERT
  30. INTO `forum_c` VALUES (3, 1, 1, 0, '1', 'teme e e eeeee eetr hdgfb', 'tre ret reyt hhg ggggg gg g h gfhhhghh', 0, 0, 0, 0, 0);
  31. INSERT
  32. INTO `forum_c` VALUES (4, 4, 1, 2, '1', 'j j j j jj j ', 'wwwwwwww wwwwwwwww wwwwwww eeeee iiii', 15, 1, 0, 0, 0);
popbart
Cytat
$zapytanie4="SELECT MAX(id) FROM forum_c WHERE id_='1'";

A może poczytaj o grupowaniu MySQL->group_by tongue.gif
  1. SELECT MAX(id)
  2. FROM forum_c WHERE id_=1
  3. GROUP BY id_
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.