rkolida
29.10.2006, 15:27:47
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
29.10.2006, 16:27:05
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
29.10.2006, 16:52:09
Struktura jest taka sama. Ale wlasnie nie bardzo wiem jak takie zapytanie zmajstrowac, a rekordow jest duzo i nie chce namieszac.
venomz
29.10.2006, 17:00:32
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:
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
29.10.2006, 17:17:28
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:

?
DELETE FROM foty.zdjecia_wszystkie WHERE zdjecie = any (SELECT zdjecie FROM foty.zdjecia_usuniete);
Dobrze ?
venomz
29.10.2006, 17:27:01
sprobuj zrobic cos takiego:
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:
DELETE FROM foty.zdjecia_wszystkie WHERE zdjecie = any (SELECT zdjecie FROM foty.zdjecia_usuniete);
dr_bonzo
29.10.2006, 17:46:24
Zrzuc tresc dancyh zbazy do plikow (posortowane) i daj 'diff'a
rkolida
29.10.2006, 17:54:52
OKEJ, dzieki wielkie, bede probowal zadzialac z zapytaniami i dam znac jak poszlo.
A z tym diffem o co chodzi ?
Dziekuje venomz !
dr_bonzo
29.10.2006, 17:59:59
rkolida
29.10.2006, 18:18:00
Dzialam w phpMyAdmini i oto wynik:
zapytanie SQL: Dokumentacja
SELECT *
FROM foty.zdjecia_wszystkie WHERE zdjecie = any(
SELECT zdjecie
FROM foty.zdjecia_usuniete )
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
29.10.2006, 18:31:36
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:
SELECT *
FROM zdjecia_wszystkie WHERE zdjecie = any(
SELECT zdjecie
FROM zdjecia_usuniete )
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 ):
SELECT *
FROM game_server.users WHERE user_id = any(
SELECT admin_id
FROM game_server.servers )
LIMIT 0, 30;
normalnie sie wykonuje
rkolida
29.10.2006, 18:35:14
To zapytania zwraca ten sam blad. Czy moze to byc wina wersji mysqla lub php ? Uzywam Krasnala 2.7.
venomz
29.10.2006, 18:38:59
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
29.10.2006, 18:42:27
No juz znalazlem na samym dole tutaj:
http://dev.mysql.com/doc/refman/5.0/en/any...subqueries.htmlPlease 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
29.10.2006, 18:44:27
a no fakt podzapytania nie dzialaja w tych starszych wersjach mysql'a

najlepiej zainstaluj sobie mysql'a 5-ke
powodzenia!
rkolida
29.10.2006, 18:57:59
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.