![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 372 Pomógł: 2 Dołączył: 10.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam, próbuje zakodować funkcjonalność usuwania słówek z bazy danych.
Baza danych ma 3 tabele (problemem jest tu to że trzecia tabela to powiązanie pomiędzy dwoma poprzednimi tabelami i ją trzeba najpierw usunąć) Oto tabele:
i teraz żeby usunąć slowo_pl musze najpierw znaleźć id tego słowa w tabeli "tlumaczenie" usunąć rekord z tym id, a następnie znaleźć w tabeli slowo_pl to słowo i usunąć, próbuje wykonać to za pomocą następującego kodu (niestety nie wystepuje zaden błąd ale słowo nie usuwa się z bazy):
czy ktoś mógłby doradzić jak to zrobić, albo chociaż co tu skopałem, ze nie działa tak jak trzeba? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 374 Pomógł: 149 Dołączył: 1.03.2006 Ostrzeżenie: (0%) ![]() ![]() |
Tego nie musisz kodować w php. MySQL daje możliwość tworzenia powiązań między tabelami z opcją kasowania kaskadowego. Jak się to dobrze rozegra, to usunięcie rekordu z jednej tabeli spowoduje usunięcie odpowiednich rekordów z innych tabel.
Aha. Twoje zapytanie się nie wykonuje z tej prostej przyczyny, że używasz zmiennej $_slowko_pl, której nie nadajesz żadnej wartości. Ten post edytował JoShiMa 27.08.2009, 20:10:01 -------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
@JoShiMa: nie ma tak łatwo. Użycie ON DELETE CASCADE w tym przypadku to podcinanie gałęzi na jakiej się siedzi. Przy tłumaczeniach masz bowiem złączenia także inne niż 1-do-1 bo występują słowa mające wiele znaczeń, czasem w zależności od kontekstu. Prosty przykład: szczyt. W zależności od tego czy chodzi o szczyt góry, konferencję czy też coś innego, masz różne odpowiedniki w angielskim. Kaskadowa kasacja pozbawiła by Cię szybko wieloznaczności. W przypadku słownika musi usuwając klucz sprawdzać, czy do obu ze słów istnieją powiązania z innymi słowami. Dopiero ich brak pozwala na usunięcie słowa z bazy. Czasem może się okazać, że usunięcie tłumaczenia kończy się tylko na tym, innym razem pozwoli na usunięcie tłumaczenia i obu wyrazów, a czasem tylko jednego z nich. Nie można w takiej sytuacji zdać się tylko na bazę.
-------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 898 Pomógł: 80 Dołączył: 31.05.2008 Ostrzeżenie: (20%) ![]() ![]() |
I wystarczy:
-------------------- cojack blog - mój blog (na jakiś czas off).
"jak czegoś nie wiem, to nie myślę że wiem" - moja domena |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 372 Pomógł: 2 Dołączył: 10.05.2009 Ostrzeżenie: (0%) ![]() ![]() |
Joshima:
poszedłem za Twoimi słowami i zastosowałem kaskadowe usuwanie robiąc tak: alter table tlumaczenie add constraint foreign key(id_slowo_pl) REFERENCES slowo_pl(id) ON DELETE CASCADE; alter table tlumaczenie add constraint foreign key(id_slowo_ang) REFERENCES slowo_ang(id) ON DELETE CASCADE; czyli dokładnie to co napisał w ostatnim poście Cojack. Tyle ze wadą takiego rozwiązania jest to, że usuwa mi tylko słówko polskie oraz tłumaczenie, a więc rekordy z dwoch tabel powiązane ze sobą, nie usuwa natomiast słowka angielskiego, które to również powinno zostać usunięte. Dodatkowo nowe spojrzenie naświetlił thek, że odpowiedniki słówek mają różne znaczenia i tu tez problem jak to zakodować, żeby usunęło się własciwe tłumaczenie, oraz jak zmienić moj kod(ponizej) aby usuwało się nie tylko słówko polskie i powiązanie ( z tabeli tłumaczenie) ale tez słowko angielskie które jest z nim powiązane) Obecny kod:
Jedyne co mi przychodzi do głowy aby jednocześnie usunęło się słowko angielskie to dodać w formularzu pole, by użytkownik wpisał też słowko w języku angielskim a w kodzie dodać jeszcze jedno DELETE by usunąć to słowko. Wada jest taka, że przecież użytkownik nie zawsze zna słówko i jego odpowiednik w j. angielskim a więc rozwiązanie to nie jest dobre... |
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 4 362 Pomógł: 714 Dołączył: 12.02.2009 Skąd: Jak się położę tak leżę :D ![]() |
Przecież możesz mu pokazać co może usunąć w przypadku niejednoznaczności. Jeśli masz tylko jedno dowiązanie, znaczenie, to usuwasz od razu. Jeśli więcej to zwracasz na ekran kombinacje możliwen i pytasz usera, o które mu chodzi. Dopiero to usuwasz.
-------------------- Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
|
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 01:53 |