![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 367 Pomógł: 10 Dołączył: 20.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
jako że SQL nie jest moją najmocniejszą stroną mam problem z Usuwaniem rekordów z wielu tabel jednym zapytaniem.
Problem polega na tym że MySQL nie usuwa żadnych rekordów (nie pokazuje też błędu) Ten Delete ma usuwać określone pola z tabel: Kod `history`, `thumb`, `photos`, `images`,`group` Tabele wyglądają tak: group Kod group_id | group_name|... images Kod img_id|group_id|... photos Kod photo_id|img_id|... thumbs Kod thumb_id|photo_id history Kod history_id|photo_id|thumb_id|... Jeśli chodzi o tabelę history w jednej pozycji jest albo photo_id albo thumb_id nigdy jednocześnie Cała operacja ma wyglądać tak że usuwam wszystko o group_id i kolejno wszystkie rekordy z tych tabel ktore naleza do tej grupy. Group zawiera images, images zawierają photos, photos zawierają thumbs a history zawiera kopie thumbs lub photos. Kod group | images | photos \ | history thumbs / Czy da się jednym zapytaniem usunąć rekordy? Bo robienie kilku selektów i pętl strasznie obciązy serwer. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 100 Pomógł: 1 Dołączył: 6.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
Sprawdź czy jeśli zrobisz SELECT * zamiast DELETE, to czy otrzymasz jakieś wyniki
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Admin Techniczny Grupa: Administratorzy Postów: 2 071 Pomógł: 93 Dołączył: 5.07.2005 Skąd: Olsztyn ![]() |
i spróbuj wywalić USING
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 367 Pomógł: 10 Dołączył: 20.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Problem wykryty:
Problemem jest tabel history która zawiera pola photo_id oraz thumb_id, po usunięciu tej tabeli z zapytania DELETE wszystko zgodnie z planem się usuwa. Ale zrobiłem jeszcze że usunalem pole thumb_id i zostalo samo photo_id w history. I też działa. Pytanie: Czy muszę zrobic teraz dwie tabele history_thumb i history_photos? Czy coś źle robie w moim zapytaniu?? Ten post edytował eai 19.06.2007, 02:13:34 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 100 Pomógł: 1 Dołączył: 6.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
Sprawdź:
Powinno działać, gdy są odpowiednie rekordy w połączonych tabelach. Jeżeli nie ma odpowiednich rekordów we wszystkich tabelach, to moim zdaniem powinieneś zastosować LEFT JOIN, a nie zwykłe złączenia -------------------- |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 367 Pomógł: 10 Dołączył: 20.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki waszym wskazówkom doszedłem do rozwiązania problemu:
Niestety muszę wykonać 5 Zapytań. Jestem tylko Ciekaw jak będzie wyglądało obciążenie przy sporej ilości danych.... |
|
|
![]()
Post
#7
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Albo wykorzystaj kaskadowe usuwanie bedziesz mial 1 zapytanie ale i tak wydajnosc jest ta sama.
-------------------- |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 367 Pomógł: 10 Dołączył: 20.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Kaskadowe?? Co masz na myśli?
Próbowałem w jednym zapytaniu ale się nie udało ponieważ wszystkie warunki muszą być spełnione. dla DELETE nie moge uzywac podzapytan(select) już próbowałem. Jak masz pomysł to napisz swój kod, a na pewno przetestuje ![]() |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 100 Pomógł: 1 Dołączył: 6.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
Jak widzę zmieniłeś nazwy tabel. Sprawdź:
-------------------- |
|
|
![]()
Post
#10
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
@eai Majac relacje w bazie i powiazanie caskadowe usuwajac nadrzedny rekord w Twoim przypadku grupe usuwa automatycznie reszte rekordow.
-------------------- |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 367 Pomógł: 10 Dołączył: 20.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Jak stworzyć taką relację w PhpMyAdmin ?
|
|
|
![]()
Post
#12
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Polecam jak zawsze manual. http://dev.mysql.com/doc/refman/5.1/en/inn...onstraints.html
-------------------- |
|
|
![]()
Post
#13
|
|
Grupa: Zarejestrowani Postów: 367 Pomógł: 10 Dołączył: 20.05.2005 Ostrzeżenie: (0%) ![]() ![]() |
Fajna sprawa. Jak zawsze za pomoc ślicznie dziękuje
![]() Pozdrawiam. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 13.06.2025 - 07:24 |