Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Porownywanie baz danych
Forum PHP.pl > Forum > Przedszkole
rkolida
Witam,
Mam problem, nie wiem jakiego uzyc programu do porownania dwoch baz danych.
Jedna to baza moich wszystkich zdjec (baza z nazwami plikow), a druga to baza zdjec, ktore z roznych powodow usunalem kiedys.

BAZA01 - wszystkie zdjecia (rowniez te usuniete)
BAZA02 - zdjecia usuniete

Jakim programem moge zrobic BAZA01 odjac BAZA02 ?

Nie wiem czy jasno sie wyrazilem, ale rozumiecie o co chodzi chyba..
Chodzi o to zeby z BAZY01 usunac to wszystko co znajduje sie w BAZIE02. Takie jakby czyszczenie.

Dodam jeszcze tylko ze to bazy MySQL. Znacie jakis soft ktory szybko to zrobi ? Moze nawet Access to ma, ale nie wiem jak tego szukac.

Pozdrawiam,
Raf
venomz
nie wiem czy jest do tego jakis specjalny soft ale na pewno da sie napisac niezbyt skomplikowany skrypt ktory Ci wykona taka operacje. Jezeli struktura tabel jest taka sama w obu bazach to prawdopodobnie da sie to zrobic jednym zapytaniem
rkolida
Struktura jest taka sama. Ale wlasnie nie bardzo wiem jak takie zapytanie zmajstrowac, a rekordow jest duzo i nie chce namieszac.
venomz
doladnie ci nie podpowiem bo musialbym miec dostep do tej bazy ale kombinuj mniej wiecej tak:

Jezeli masz w tabeli jakas kolumne ktora gwarantuje niepowtarzalnosc (jakis klucz) to uzyj ja w zapytaniu w ten sposob:

  1. DELETE FROM baza1.tabela1 WHERE id = any (SELECT id FROM baza2.tabela1);


to powinno wykasowac z bazy1 z tabeli1 wszystkie wiersze ktore znajduja sie w bazie2 w tabeli1
rkolida
No mam w tabeli tylko jedna kolumne - nazwy plikow.
I sa one rozne, cos takiego 20060223123342.jpg , po prostu data, wiec sie nie powtarza.

Jedna tabela to zdjecia_wszystkie
Druga top zdjecia_usuniete

Czyli to bedzie ok: questionmark.gif?

  1. DELETE FROM foty.zdjecia_wszystkie WHERE zdjecie = any (SELECT zdjecie FROM foty.zdjecia_usuniete);


Dobrze ?
venomz
sprobuj zrobic cos takiego:

  1. SELECT * FROM foty.zdjecia_wszystkie WHERE zdjecie = any (SELECT zdjecie FROM foty.zdjecia_usuniete);


to zapytanie zamiast usunac wylistuje. jak wszystko sie bedzie zgadzalo to usuwaj:

  1. DELETE FROM foty.zdjecia_wszystkie WHERE zdjecie = any (SELECT zdjecie FROM foty.zdjecia_usuniete);
dr_bonzo
Zrzuc tresc dancyh zbazy do plikow (posortowane) i daj 'diff'a
rkolida
OKEJ, dzieki wielkie, bede probowal zadzialac z zapytaniami i dam znac jak poszlo.
A z tym diffem o co chodzi ?

Dziekuje venomz !
dr_bonzo
http://unixhelp.ed.ac.uk/CGI/man-cgi?diff
rkolida
Dzialam w phpMyAdmini i oto wynik:

zapytanie SQL: Dokumentacja

  1. SELECT *
  2. FROM foty.zdjecia_wszystkie WHERE zdjecie = any(
  3.  
  4. SELECT zdjecie
  5. FROM foty.zdjecia_usuniete )
  6. LIMIT 0, 30


MySQL zwrócił komunikat: Dokumentacja
#1064 - Something is wrong in your syntax obok '(select zdjecie from foty.zdjecia_usuniete) LIMIT 0, 30' w linii 1
venomz
z tego co widze to obie kolumny sa w jednej bazie danych (wczesniej chyba pisales o dwoch). jesli tak to nie musisz pisac foty.zdjecia, wystarczy zdjecia.

sprobuj tak:

  1. SELECT *
  2. FROM zdjecia_wszystkie WHERE zdjecie = any(
  3.  
  4. SELECT zdjecie
  5. FROM zdjecia_usuniete )
  6. LIMIT 0, 30


edit:

ale to jednak nie tutaj jest blad bo w tym wypadku nie ma znaczenia czy podasz nazwe bazy czy nie.
u mnie podobne zapytanie ( co prawda inna struktura ale to bez znaczenia ):

  1. SELECT *
  2. FROM game_server.users WHERE user_id = any(
  3.  
  4. SELECT admin_id
  5. FROM game_server.servers )
  6. LIMIT 0, 30;


normalnie sie wykonuje
rkolida
To zapytania zwraca ten sam blad. Czy moze to byc wina wersji mysqla lub php ? Uzywam Krasnala 2.7.
venomz
hmm... ciezko powiedziec bo kod bledu nie jest wystarczajaco sprecyzowany :/

na pewno wszystkie nazwy sa dobrze wprowadzone?

#1064 - Something is wrong in your syntax obok '(select zdjecie from foty.zdjecia_usuniete) LIMIT 0, 30' w linii 1

a co ci zwraca select zdjecie from foty.zdjecia_usuniete ?
rkolida
No juz znalazlem na samym dole tutaj: http://dev.mysql.com/doc/refman/5.0/en/any...subqueries.html

Please note that this article is not correct for MySQL before 4.1 despite it being in the manual for 3.23, 4.0, 4.1. No subqueries of any type work in MySQL 4.0 or less.


Ja mam 3.23, bo taki mysql jest w krasnalu. Ale juz zasysam KMySQL 4.1.10a
MySQL 4.1.11 dla Krasnala z krasnal.tk i zobacze co tam sie wydarzy.

Jestem wdzieczny za ten support venomz!
venomz
a no fakt podzapytania nie dzialaja w tych starszych wersjach mysql'a smile.gif
najlepiej zainstaluj sobie mysql'a 5-ke

powodzenia!
rkolida
juz dziala !

zainstalowalem nowszego mysqla i gra wszystko. usuwa co trzeba, jest jak byc powinno.
Dziekuje za pomoc Venomz. Szacunek!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.