![]() |
![]() |
![]()
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 ![]()
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 -------------------- [ TO MIEJSCE CZEKA NA TWOJĄ REKLAMĘ ! ]
|
|
|
![]() |
![]()
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
![]() -------------------- Środowisko: Gentoo 2008.0 | Apache | PHP5 | PostgreSQL | MySQL | Postfix
Workstation: Gentoo 2008.0 | Firefox Thomas Alva Edison: "Aby coś wynaleźć wystarczy odrobina wyobraźni i sterta złomu ..." Odpowiedź na każde pytanie typu "Jak ...": "Nie da się, to nie PostgreSQL" |
|
|
![]()
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...
-------------------- [ TO MIEJSCE CZEKA NA TWOJĄ REKLAMĘ ! ]
|
|
|
![]()
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 ![]() -------------------- [ TO MIEJSCE CZEKA NA TWOJĄ REKLAMĘ ! ]
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 01:54 |