Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> jak wyciagnac najwieksza wartosc? ; auto_increment, 3 problemy
invx
post 1.01.2005, 22:35:14
Post #1





Grupa: Zablokowani
Postów: 655
Pomógł: 0
Dołączył: 28.11.2003
Skąd: Zagórz

Ostrzeżenie: (80%)
XXXX-


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

Ten post edytował invx 1.01.2005, 22:36:12


--------------------
RCXcms
www.rcx.prv.pl
Pierwszy polski w pełni zintegrowany system portal
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 7)
mhs
post 1.01.2005, 22:50:57
Post #2





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
invx
post 2.01.2005, 13:49:06
Post #3





Grupa: Zablokowani
Postów: 655
Pomógł: 0
Dołączył: 28.11.2003
Skąd: Zagórz

Ostrzeżenie: (80%)
XXXX-


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


--------------------
RCXcms
www.rcx.prv.pl
Pierwszy polski w pełni zintegrowany system portal
Go to the top of the page
+Quote Post
gdaq
post 2.01.2005, 19:40:11
Post #4





Grupa: Zarejestrowani
Postów: 62
Pomógł: 0
Dołączył: 25.12.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Vertical
post 2.01.2005, 19:52:43
Post #5





Grupa: Zarejestrowani
Postów: 848
Pomógł: 0
Dołączył: 7.07.2004
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


1)
  1. SELECT MAX(id) AS max_id
  2. FROM tabela
Go to the top of the page
+Quote Post
mhs
post 2.01.2005, 20:22:46
Post #6





Grupa: Zarejestrowani
Postów: 764
Pomógł: 3
Dołączył: 30.04.2003

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
invx
post 3.01.2005, 21:25:09
Post #7





Grupa: Zablokowani
Postów: 655
Pomógł: 0
Dołączył: 28.11.2003
Skąd: Zagórz

Ostrzeżenie: (80%)
XXXX-


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);


--------------------
RCXcms
www.rcx.prv.pl
Pierwszy polski w pełni zintegrowany system portal
Go to the top of the page
+Quote Post
popbart
post 3.01.2005, 21:56:01
Post #8





Grupa: Zarejestrowani
Postów: 255
Pomógł: 0
Dołączył: 22.04.2004
Skąd: Żoliborz

Ostrzeżenie: (0%)
-----


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_


--------------------
Visual Basic - kto by pomyślał :)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 17:04