Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Tabele tymczasowe i blokowanie tabel.
Forum PHP.pl > Forum > Bazy danych
spokoloko123
Natknąłem się na taki kod:
  1. $sql = "CREATE TEMPORARY TABLE tmp ( " .
  2. "topic_id INT(11) NOT NULL DEFAULT 0, " .
  3. "postdate datetime NOT NULL default '0000-00-00 00:00:00')";
  4. or die(mysql_error() . "<br>" . $sql);
  5.  
  6. $sql = "LOCK TABLES forum_users READ,forum_posts READ";
  7. or die(mysql_error() . "<br>" . $sql);
  8.  
  9. $sql = "INSERT INTO tmp SELECT topic_id, MAX(date_posted) " .
  10. "FROM forum_posts " .
  11. "WHERE forum_id = $forumid " .
  12. "AND topic_id > 0 " .
  13. "GROUP BY topic_id";
  14. or die(mysql_error() . "<br>" . $sql);
  15.  
  16. $sql = "UNLOCK TABLES";
  17. or die(mysql_error()."<br>".$sql);

Niby wszystko jasne, ale o co chodzi z tym blokowaniem tabel? Po co to?

Pozdrawiam nerdsmiley.png

EDIT: "Już" mam. Dla przyszłych pokoleń: Tablica jest blokowana do odczytu (czyli można tylko odczytać) ponieważ zaraz w kolejnym zapytaniu dane pogrupowane z jednej tabeli są wstawiane do tabeli tymczasowej. Po zakończeniu tej czynności spokojnie można tabele odblokować.
bpskiba
Cytat(spokoloko123 @ 1.05.2012, 05:56:01 ) *
Natknąłem się na taki kod:
  1. $sql = "CREATE TEMPORARY TABLE tmp ( " .
  2. "topic_id INT(11) NOT NULL DEFAULT 0, " .
  3. "postdate datetime NOT NULL default '0000-00-00 00:00:00')";
  4. or die(mysql_error() . "<br>" . $sql);
  5.  
  6. $sql = "LOCK TABLES forum_users READ,forum_posts READ";
  7. or die(mysql_error() . "<br>" . $sql);
  8.  
  9. $sql = "INSERT INTO tmp SELECT topic_id, MAX(date_posted) " .
  10. "FROM forum_posts " .
  11. "WHERE forum_id = $forumid " .
  12. "AND topic_id > 0 " .
  13. "GROUP BY topic_id";
  14. or die(mysql_error() . "<br>" . $sql);
  15.  
  16. $sql = "UNLOCK TABLES";
  17. or die(mysql_error()."<br>".$sql);

Niby wszystko jasne, ale o co chodzi z tym blokowaniem tabel? Po co to?

Pozdrawiam nerdsmiley.png

EDIT: "Już" mam. Dla przyszłych pokoleń: Tablica jest blokowana do odczytu (czyli można tylko odczytać) ponieważ zaraz w kolejnym zapytaniu dane pogrupowane z jednej tabeli są wstawiane do tabeli tymczasowej. Po zakończeniu tej czynności spokojnie można tabele odblokować.


Bardzo mi się ten mechanizm nie podoba....
najprościej i bez blokady
  1. CREATE TEMPORARY TABLE tmp AS SELECT topic_id, MAX(date_posted)
  2. FROM forum_posts
  3. WHERE forum_id = $forumid
  4. AND topic_id > 0
  5. GROUP BY topic_id


Natomiast stworzenie tego mechanizmu sugeruje istnienie problemu z indeksowaniem lub konfiguracją serwera. Zapewne długo się to wykonywało i ktoś kombinował...
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.