![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 24.06.2014 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
potrzebuję zrobić na swoją stronę(a właściwie zrobiłem) skrypt dodający tresci, które mogą należeć do paru kategorii. Zależy mi abym mógł na raz dodawać np 100 rekordów. W bazie mam jedną główną tabelę o nazwie Filmy, struktura:
Oraz każda kategoria zawiera swoje oddzielne tabele, połączone id-em z tabelą główną, każda kategoria będzie wyświetlana na oddzielnej stronie, także taka struktura wydaje mi się najlepsza:
Poniżej kod dodający dane do dwóch tabel na raz(z objasnieniami co chciałem zrobić):
Ogólnie kod działa jak należy, jednak tylko dla jednego dodanego wyniku. PYTANIA: 1. Niestety pobierany jest tylko id pierwszego dodanego wyniku i umieszczany w tabeli kategorii, chciałbym aby przy dodawaniu np 50 Values w Insert wszystkie były dodawane od razu do odpowiednich kategorii, da się tak zrobić? Bo dodawanie oddzielnie 50 rekordów byłoby "trochę" uciążliwe. Próbowałem pętle jednak tak kombinowałem że dodałem do dwóch tabel ponad 6 mln rekordów na raz ![]() 2. Czy dałoby radę umieścić wszystko w jednym ifie tzn. sprawdzić jakie cyfry są zawarte w "kategoria_filmu" i umiescic w odpowiednich tabelach kategorii, próbowałem else, ale jeżeli jest spełniony pierwszy warunek to już nie przechodzi do następnego. Poniżej skrypt wyświetlający wszystkie wiersze z kategorii:
PYTANIE ogólne: 3. Czy cały ten kod da się jakoś zoptymalizować, może macie jakieś inne sposoby? (ogólnie wszystko działa jak należy oprócz dodawania wielu Values na raz) Na koniec proszę o wyrozumiałość, wstyd się przyznać ale napisanie tego zajęło mi 2 dni(nie korzystałem z innych skryptów), próbowałem na wiele sposobów i ten wydaje mi się najlepszy. Pozdrawiam Ten post edytował Przekras 15.10.2014, 19:03:37 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 933 Pomógł: 460 Dołączył: 2.04.2010 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Struktura bazy danych nie jest optymalna. Źle to wszystko rozplanowałeś. Potrzebujesz jednej tabeli filmy, jednej tabeli kategorie oraz jednej tabeli przyporządkowującej film do kategorii. Czyli teoretyczna struktura powinna wyglądać tak:
Oczywiście w tabeli movie_categories kolumna id jest zbędna, ale można ją zachować dla porządku. Ten post edytował b4rt3kk 15.10.2014, 17:49:58 -------------------- Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 24.06.2014 Ostrzeżenie: (0%) ![]() ![]() |
W tabeli movie_categories kolumna id_movies (u mnie-numer_filmu) zawierałaby 8 cyfr bo tak długie są numery filmów, i do tego bez żadnej kolejności. Na jednej stronie będę wyświetlał filmy(odnośniki do filmów) tylko z jednej kategorii np. 40 stron po 40 odnośników to daje 1600 dla jednej kategorii(podział na strony przez stronnicowanie), licząc że kategorii będzie 9 a jeden film będzie należał do 3 kategorii tabela „movie_categories” miałaby 43 200 rekordów.
Natomiast w moim rozwiązaniu dane są sczytywane z jednej tabeli kategorii a następnie tytuł i numer filmu ściągany z tabeli Filmy po numerze id, czyli w tym przypadku tabela kategorii zawierałaby te 1600 rekordów, a tabela Filmy 14 400, czyli mniej do przeszukania. Będę wdzięczny jeżeli wytłumaczysz mi dlaczego Twoje rozwiązanie byłoby optymalniejsze(pamiętając że każda kategoria będzie wyświetlana na oddzielnej stronie), bo jak tak rozpisałem to wydaje mi się że moje, ale dobrze się na tym nie znam ![]() Pozdrawiam |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 2 355 Pomógł: 533 Dołączył: 15.01.2010 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Jeżeli masz pewność, że zawsze będziesz wykonywał zapytanie pobierające filmy tylko i wyłącznie z jednej kategorii, to Twoje rozwiązanie może mieć jakiś tam głębszy sens, jak będziesz miał milion filmów dla kategorii.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 933 Pomógł: 460 Dołączył: 2.04.2010 Skąd: Lublin Ostrzeżenie: (0%) ![]() ![]() |
Po pierwsze już w samym momencie zapisu danych wykonujesz nadmiarową liczbę zapytań. Po drugie preg_match dodatkowo spowalnia wstawianie rekordów (swoje zajmuje czasowo, zmień na str_pos jak musisz tak robić). Już lepiej (o ile jesteś pewien, że zostajesz przy takiej strukturze bazy) oddzielić poszczególne id np. średnikiem. Wtedy wystarczy explode. Przykład poniżej.
No i co do samej zasadności użycia 3 tabel. Nie chodzi tutaj o liczbę rekordów, tylko o uniwersalność rozwiązania. Wyobraź sobie, że dodajesz lub usuwasz kategorię. I co wtedy? Wszystko nagle się rypnie, bo albo będziesz musiał modyfikować wszystkie wpisy z tabeli filmy, albo baza utraci spójność. A tak, usuwasz kategorię, usuwasz wszystkie dowiązania i baza dalej działa bez zarzutu. Gdy będziesz chciał dodać kolejną kategorię to będziesz musiał dodawać kolejne tabele dla tej kategorii. A tak to masz jedno proste zapytanko żeby pobrać całą daną kategorię (pownno być dosyć szybkie), a napewno bardziej uniwersalne, na potrzeby www (potrzebujesz tylko 1 i tej samej podstrony, a zmieniasz tylko parametr w GET):
-------------------- Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 421 Pomógł: 310 Dołączył: 18.04.2012 Ostrzeżenie: (0%) ![]() ![]() |
W tabeli movie_categories kolumna id_movies (u mnie-numer_filmu) zawierałaby 8 cyfr bo tak długie są numery filmów, i do tego bez żadnej kolejności. Na jednej stronie będę wyświetlał filmy(odnośniki do filmów) tylko z jednej kategorii np. 40 stron po 40 odnośników to daje 1600 dla jednej kategorii(podział na strony przez stronnicowanie), licząc że kategorii będzie 9 a jeden film będzie należał do 3 kategorii tabela „movie_categories” miałaby 43 200 rekordów. Coś źle liczysz... Jeśli będziesz miał 1600 filmów i 9 kategorii, a każdy film będzie należał do 3 kategorii, to tabela movie_categories będzie miała 1600*3 rekordów. Czyli jakieś 4800. Natomiast w moim rozwiązaniu dane są sczytywane z jednej tabeli kategorii a następnie tytuł i numer filmu ściągany z tabeli Filmy po numerze id, czyli w tym przypadku tabela kategorii zawierałaby te 1600 rekordów, a tabela Filmy 14 400, czyli mniej do przeszukania. Będę wdzięczny jeżeli wytłumaczysz mi dlaczego Twoje rozwiązanie byłoby optymalniejsze(pamiętając że każda kategoria będzie wyświetlana na oddzielnej stronie), bo jak tak rozpisałem to wydaje mi się że moje, ale dobrze się na tym nie znam ![]() A tu nie wiem, skąd wziąłeś 1600 kategorii? Naprawdę sądzisz, że fimy da się opisać aż tyloma kategoriami? @b4rt3kk ci wszystko ładnie rozpisał. Spróbuj. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 25.07.2025 - 10:02 |