[PHP][MYSQL]dodanie rekordu do powiązanych tabel, jak dodac rekord do tabeli, która jest powiązana z dwoma innymi? |
[PHP][MYSQL]dodanie rekordu do powiązanych tabel, jak dodac rekord do tabeli, która jest powiązana z dwoma innymi? |
21.10.2008, 10:28:24
Post
#1
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 25.09.2006 Ostrzeżenie: (0%) |
mam taką bazę danych:
i skrypt php, który powinien dodawać rekordy do powyższej bazy danych:
niestety ten skrypt nie działa i nie potrafię sobie sama z nim poradzić, nie dodaje prawidłowo wartości do id_autor i wydawnictwo_id w tabeli książki no i nie chce dodać odpowiednich rekordów do tabel autor i wydawn :/ w tabeli ksiazki w wyniku dodania rekordu uzyskuje wartości: id_autor: 0 tytuł: cos tam wydawnictwo_id: 0 HELP!!!! |
|
|
21.10.2008, 10:50:47
Post
#2
|
|
Grupa: Zarejestrowani Postów: 419 Pomógł: 42 Dołączył: 12.08.2008 Skąd: Wrocław Ostrzeżenie: (0%) |
Ten post edytował golaod 21.10.2008, 10:51:29 |
|
|
21.10.2008, 10:54:32
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) |
Najlepiej byłoby skorzystać z trigera, jeśli Twoja wersja bazy danych to dopuszcza.
-------------------- |
|
|
-gex- |
21.10.2008, 11:01:20
Post
#4
|
Goście |
A nie lepiej to wszystko zrobić w jednej tabeli? Mniej zapytani do bazy a efekt i możliwości większe w konstruowaniu zapytań...
|
|
|
21.10.2008, 11:03:32
Post
#5
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) |
Nie, nie lepiej. Tak zbudowana baza jest nieefektywna.
-------------------- |
|
|
-gex- |
21.10.2008, 11:16:01
Post
#6
|
Goście |
Czyli mam przez to rozumieć że lepiej robić 3 zapytania niż jedno tak ? co mniej obciąży bazę?
|
|
|
21.10.2008, 11:24:52
Post
#7
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) |
Czyli mam przez to rozumieć że lepiej robić 3 zapytania niż jedno tak ? co mniej obciąży bazę? Jeśli baza będzie skonstruowana dobrze, to w tym wypadku trzy zapytania są lepsze niż jedno. Mogłabym się tu rozwodzić na temat optymalizacji bazy, ale lepiej będzie jak poczytasz fachową literaturę -------------------- |
|
|
21.10.2008, 11:26:24
Post
#8
|
|
Grupa: Przyjaciele php.pl Postów: 7 494 Pomógł: 302 Dołączył: 31.03.2004 Ostrzeżenie: (0%) |
Czyli mam przez to rozumieć że lepiej robić 3 zapytania niż jedno tak ? co mniej obciąży bazę? Zbyt płytko to oceniasz.Co wykonujesz na bazie częściej? Zapis czy odczyt? Masz rację, szybciej zapisac rekord do jednej tabeli niż do trzech. Choć różnica jest pomijalna i nie to jest najważniejsze. Najważniejsze jest optymalne przechowywanie dancyh i szybki dostęp do nich. A przy rozbiciu na tebele jest lepiej, szybciej i optymalniej. Podana przez Ciebie konstrukcja jest zła. Tragiczna bym rzekł. Jak sobie wyobrażasz dodanie 100 książek tego samego autora? 100 razy to samo w tabeli? Pomyłka. |
|
|
21.10.2008, 11:54:52
Post
#9
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 25.09.2006 Ostrzeżenie: (0%) |
No właśnie, teraz zastanawiam się nad tym aby skrypt sprawdzał czy dana pozycja już istnieje w bazie zanim ją doda, samo dodawanie już działa dzięki użytkownikowi golaod (bardzo dziękuję).
|
|
|
-gex- |
21.10.2008, 12:21:26
Post
#10
|
Goście |
Faktycznie po przemyśleniu tego zagadnienia optymalniej jest przechowywać jest raz jedno nazwisko niż tyle samo ile wydał książek. Burza mózgów czasem wskazana
|
|
|
21.10.2008, 13:27:33
Post
#11
|
|
Grupa: Zarejestrowani Postów: 419 Pomógł: 42 Dołączył: 12.08.2008 Skąd: Wrocław Ostrzeżenie: (0%) |
Tu nie ma co się zastanawiać nad optymalnością. Czemu ludzie wymyślili programowanie obiektowe ? Bo wszystko da się dobrze zilustrować dzięki OOP można nawet skonstruować w banalny sposób człowieka (tzn imitacje)
Czemu zatem nie ma co się zastanawiać nad konstrukcją tabel ? Bo istnieje coś takiego jak schemat drzewa który jest po prostu wszechmocny do czegoś takiego. Zatem oczywiste jest, że baz powinna wyglądać tak: lista_autorow->lista_ksiazek(lista_autorow_id,gatunek_id)<-gatunek(lista_autorow_id) |
|
|
21.10.2008, 15:48:46
Post
#12
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 25.09.2006 Ostrzeżenie: (0%) |
aj, teraz sobie nie daje rady z tym aby sprawdzało przed wstawieniem rekordu do bazy czy np. dana osoba lub wydawnictwo już czasem nie istnieje kombinowałam z zapytaniem select a potem z if-ami, ale nie wychodzi mi nic
|
|
|
21.10.2008, 16:02:32
Post
#13
|
|
Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa |
zamiast:
$wynik = mysql_query('SELECT 0 FROM autor WHERE id_autor='.$nazwisko'); daj $wynik = mysql_num_rows(mysql_query('SELECT 0 FROM autor WHERE id_autor='.$nazwisko.')); |
|
|
21.10.2008, 16:27:13
Post
#14
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 25.09.2006 Ostrzeżenie: (0%) |
lipa, bo nadal nie sprawdza czy autor istnieje, dodaje go na nowo:( takim sposobem mam dwóch Kwiatkowskich
|
|
|
21.10.2008, 16:31:53
Post
#15
|
|
Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa |
na podstawie tego co napisałem już bys sobie sam mógł to zrobić ....
Ten post edytował Spawnm 21.10.2008, 16:55:24 |
|
|
22.10.2008, 15:45:27
Post
#16
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 25.09.2006 Ostrzeżenie: (0%) |
jestem za tępa na to:/ nie dodaje dwa razy tego samego autora, ale w tabeli ksiazki wywala 0 zamiast pobierać id_autor
aaa no i jeszcze błąd: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Program Files\WebServ\httpd\cos\dod.php on line 48 (linia 48 to: if (mysql_num_rows($wynik)>=0) { ) Ten post edytował unnamed 22.10.2008, 15:47:22 |
|
|
22.10.2008, 15:54:32
Post
#17
|
|
Grupa: Moderatorzy Postów: 4 069 Pomógł: 497 Dołączył: 11.05.2007 Skąd: Warszawa |
$id_autor = mysql_num_rows(mysql_query("SELECT id_autor FROM autor WHERE nazwisko='.$nazwisko.'"));
powinno być ... where nazwisko='".$nazwisko."' ")); dalej $wynik = mysql_num_rows(mysql_query("SELECT 0 FROM autor WHERE nazwisko='".$nazwisko."'")); if (mysql_num_rows($wynik)>=0) { 2 razy num_rows ? |
|
|
22.10.2008, 16:00:24
Post
#18
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 25.09.2006 Ostrzeżenie: (0%) |
a da się raz? wydawało mi sie ze tak jak chciałam zrobić powinno być poprawnie, ale ja się nie znam :] powoli się uczę
|
|
|
22.10.2008, 16:02:07
Post
#19
|
|
Grupa: Zarejestrowani Postów: 419 Pomógł: 42 Dołączył: 12.08.2008 Skąd: Wrocław Ostrzeżenie: (0%) |
W ogóle nie rozumiem tej dziwnej i pogmatwanej konstrukcji a ty Spawnm zamiast ją nakierować na dobrą to dajesz słabo ukierunkowane podpowiedzi.
Ten post edytował batman 22.10.2008, 18:22:31
Powód edycji: poprawiłem bbcode ~batman
|
|
|
22.10.2008, 16:22:03
Post
#20
|
|
Grupa: Zarejestrowani Postów: 11 Pomógł: 0 Dołączył: 25.09.2006 Ostrzeżenie: (0%) |
ja się chyba potnę, drugi dzień myślę nad tym i mam dość:/ teraz ponownie poprawnie pobiera id_autor ale za to tym razem dodaje autora pomimo, ze jest on już w bazie
|
|
|
Wersja Lo-Fi | Aktualny czas: 24.04.2024 - 09:50 |