![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 26 Pomógł: 0 Dołączył: 23.07.2003 Ostrzeżenie: (0%) ![]() ![]() |
Mam pewien problem. Mój skrypt forum został tak napisany, że informacje o poście są w jednej tabeli a treść w drugiej, obie tabele mają wspólną kolumnę ID. Wygląda to mniej więcej tak:
Kod forum_toc (tabel z informacjami o poście) id | var1 | var2 | var3... itd ------------------------ | | | forum_text (tabela z treścią posta) id | tresc | ------------ | | Problem pojawia się w zapisie nowego postu, nowe ID pobierane jest poprzez wywołanie do bazy danych, pobraniu najwyższego ID z forum_toc i zwiększenie go o 1. Następnie nowe dane są umieszczane w tabeli poprzez wywołane 2 razy funkcje INSERT (po jednej dla kazdej tabeli). Tabele nie mają ani indexu, ani auto_increment (żeby nie było ewentualnych problemów z ID). Jeżeli teraz jednocześnie 2 uzytkowników wpisuje coś na forum to nieraz zdarza się tak, że jeden użytkownik nadpisuje forum_text drugiemu użytkownikowi (wpisy w forum_toc są poprawne, a na forum_text jest wpisane 2 razy to samo...). Moje forum jest dosyć często odwiedzane i co jakiś czas wyskakują właśnie takie kwiatki. JAK ZROBIĆ, ŻEBY W JEDNYM WYWOŁANIU WPISAĆ DANE W OBYDWIE TABELE (wtedy pozbyłbym się tego problemu)? Ale w sumie problem pewnie też tkwi w pobieranym wcześniej ID... miedzy pobraniem tedo MAX ID a wpisaniem do bazy dancyh wykonywany jest jeszcze jakiś kod... LUB JAK POŁĄCZYĆ TE 2 TABELE W JEDNĄ. Niestety nie jest to takie łatwe, ponieważ skrypt cały czas działa i w tabelach jest po około 20 000 rekordów (forum_toc zajmuje 1 MB, forum_text zajmuje 15 MB). Napisałem ten poniższy kod, ale w ciągu 30 sekund przekopiowało tylko 301 postów (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) (w domu testowałem to na Windows XP, AMD Athlon 2000+, Apache 2.0.47, php 4.3.4, MySQL 3.23.53-max-nt). Nie wiem jak będzie na serwerze, ale pewnie podobie, a ja musiałbym to połączyć bez timeouta (oczywiście moją stronę na czas połączenie był odłączył od MySQLa)...
Opis do forum_toc kolumnę post_tresc i na podstawie ID miały być kopiowane wpisy z jednej tabeli do drugiej... niestety jak już pisałem, to ma za małą wydajność... Czy ktoś wie, jak połączyć 2 tabele z taką ilością danych w jedną tabelę. ------------------------------------- UZYWAJ BBCodeu Seth |
|
|
![]() |
![]()
Post
#2
|
|
Administrator serwera Grupa: Developerzy Postów: 521 Pomógł: 13 Dołączył: 2.04.2004 Skąd: 52°24' N 16°56' E Ostrzeżenie: (0%) ![]() ![]() |
Spróbuj na czas polecenia INSERT zablokować tabele z atrybutem WRITE (IMG:http://forum.php.pl/style_emoticons/default/cool.gif)
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 26 Pomógł: 0 Dołączył: 23.07.2003 Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli się nie da tego wykonać, to proszę chociaż o adnotację, żebym po prostu się nie łudził na jakieś odpowiedzi...
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 270 Pomógł: 0 Dołączył: 15.06.2003 Ostrzeżenie: (0%) ![]() ![]() |
dziwie sie że jeszzce nikt nie odpowiedział, w takim wypadku postaram sie sam pomóc
Kod forum_toc (tabel z informacjami o poście) id | var1 | var2 | var3... itd ------------------------ | | | forum_text (tabela z treścią posta) id | tresc | ------------ | | Tabela forum_toc powinna być primary auto_increment.
Ten post edytował Bora 14.07.2004, 23:23:51 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 26 Pomógł: 0 Dołączył: 23.07.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat(Bora @ 2004-07-15 00:22:44) dziwie sie że jeszzce nikt nie odpowiedział, w takim wypadku postaram sie sam pomóc Kod forum_toc (tabel z informacjami o poście) id | var1 | var2 | var3... itd ------------------------ | | | forum_text (tabela z treścią posta) id | tresc | ------------ | | Tabela forum_toc powinna być primary auto_increment.
Proste i genialne (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) , wielkie dzięki za pomoc. W końcu się pozbyłem tego problemu... |
|
|
![]() ![]() |
![]() |
Aktualny czas: 24.08.2025 - 17:44 |