Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]Porównanie dwóch tabel z wyszukaniem nieistniejących
krzesik
post 9.06.2016, 21:05:21
Post #1





Grupa: Zarejestrowani
Postów: 512
Pomógł: 1
Dołączył: 25.08.2012

Ostrzeżenie: (0%)
-----


Witam,

mam takie zapytanie:
  1. SELECT Nazwisko_Imie, Adres FROM uzytkownik WHERE (Nazwisko_Imie AND Adres) NOT IN (SELECT Nazwisko_Imie, Adres FROM uzytkownik1)


dostaję błąd:
#1241 - Operand should contain 1 column(s)

co jest nie tak?
Go to the top of the page
+Quote Post
trueblue
post 9.06.2016, 21:19:12
Post #2





Grupa: Zarejestrowani
Postów: 6 799
Pomógł: 1827
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


NOT IN wymaga zbioru jednokolumnowego.

Zmień zapytanie, użyj LEFT JOIN i warunki IS NULL na Nazwisko_Imie i Adres.
https://www.google.pl/search?q=mysql+not+in+left+join


--------------------
Go to the top of the page
+Quote Post
krzesik
post 9.06.2016, 21:33:27
Post #3





Grupa: Zarejestrowani
Postów: 512
Pomógł: 1
Dołączył: 25.08.2012

Ostrzeżenie: (0%)
-----


kurczę nie wiem jak to naskrobać......
Go to the top of the page
+Quote Post
trueblue
post 9.06.2016, 21:37:55
Post #4





Grupa: Zarejestrowani
Postów: 6 799
Pomógł: 1827
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


http://stackoverflow.com/questions/750343/...here-not-exists
W drugim poście jest przykład z NOT IN, w trzecim zmiana na LEFT JOIN. U Ciebie zamiast id i voter_id będzie Nazwisko_Imie.
Tu jest przykład LEFT JOIN na dwóch kolumnach: http://stackoverflow.com/a/18914740/5889778
Pamiętaj o odpowiednim warunku WHERE.


--------------------
Go to the top of the page
+Quote Post
krzesik
post 10.06.2016, 15:31:27
Post #5





Grupa: Zarejestrowani
Postów: 512
Pomógł: 1
Dołączył: 25.08.2012

Ostrzeżenie: (0%)
-----


Naprawdę się starałem, a dooopa z tego..... zerknijcie proszę..

  1. SELECT * FROM uzytkownik WHERE Nazwisko_Imie OR Adres NOT IN (SELECT Nazwisko_Imie FROM uzytkownik1)
Go to the top of the page
+Quote Post
trueblue
post 10.06.2016, 16:42:19
Post #6





Grupa: Zarejestrowani
Postów: 6 799
Pomógł: 1827
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


  1. SELECT * FROM uzytkownik AS u
  2. LEFT JOIN uzytkownik1 AS u1 ON u.Nazwisko_Imie=u1.Nazwisko_Imie AND u.Adres=u1.Adres
  3. WHERE u1.Nazwisko_Imie IS NULL AND u1.Adres IS NULL


--------------------
Go to the top of the page
+Quote Post
krzesik
post 10.06.2016, 17:48:04
Post #7





Grupa: Zarejestrowani
Postów: 512
Pomógł: 1
Dołączył: 25.08.2012

Ostrzeżenie: (0%)
-----


Super, na dwóch bliźniaczych tabelach działa dobrze, ale teraz jeszcze jeden smaczek.... ;-)
Te dwie tabele są w różnych bazach, mam zrobione tak:

  1. //połączenie do pierwszej bazy
  2. include 'config.php';
  3.  
  4. $con1 = @mysql_connect($host, $user, $pswd, false);
  5. mysql_select_db("db1",$con1);
  6.  
  7.  
  8. //połączenie do drugiej bazy
  9. include 'config_new.php';
  10.  
  11. $con2 = @mysql_connect($host_tele, $user_tele, $pswd_tele, false);
  12. mysql_select_db("db2",$con2);
  13.  
  14.  
  15. //kasowanie userow ktorzy kiedyś zostali dodani, ale już ich nie ma w bazie więc chcę usunąć w bazie bliźniaczej
  16. $Mdel = mysql_query("SELECT * FROM db2.uzytkownik AS u
  17. LEFT JOIN db1.uzytkownik AS u1 ON u.Nazwisko_Imie=u1.Nazwisko_Imie AND u.Adres=u1.Adres
  18. WHERE u1.Nazwisko_Imie IS NULL AND u1.Adres IS NULL");
  19. while($del = mysql_fetch_array($Mdel))
  20. {
  21. $Kasuj = mysql_query("DELETE FROM db2.uzytkownik WHERE IDUzytkownika='$del[IDUzytkownika]'") or die('Błąd zapytania del user all: '.mysql_error());
  22. }


gdzie mam jeszcze błąd? nic mi nie kasuje.....
Go to the top of the page
+Quote Post
trueblue
post 10.06.2016, 17:58:59
Post #8





Grupa: Zarejestrowani
Postów: 6 799
Pomógł: 1827
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Musiałbyś mieć obydwie bazy dostępne pod jednym połączeniem.


--------------------
Go to the top of the page
+Quote Post
krzesik
post 10.06.2016, 18:51:07
Post #9





Grupa: Zarejestrowani
Postów: 512
Pomógł: 1
Dołączył: 25.08.2012

Ostrzeżenie: (0%)
-----


Jak to zrobić inaczej? Jakaś dodatkowa tabela TMP? Próbowałem z kasowanie na wejściu userów i dodawaniu tych co mają być w bazie, ale identyfikatory mi rosły w oczach, może coś w ten deseń?
Go to the top of the page
+Quote Post
LowiczakPL
post 11.06.2016, 11:40:03
Post #10





Grupa: Zarejestrowani
Postów: 531
Pomógł: 55
Dołączył: 3.01.2016
Skąd: Łowicz

Ostrzeżenie: (0%)
-----


dobrze kombinujesz

pobierasz sobie z jednej bazy dane nazwiska i tworzysz z tego string

Kod
$notIn = "('nazwisko', 'kolejne')";



i ten string wklejasz do zapytanie do odpytania drugiej bazy

Kod
    SELECT * FROM uzytkownik WHERE Nazwisko NOT IN $notIn


--------------------
Szukam zleceń Symfony, Laravel, Back-End, Front-End, PHP, MySQL ...
Go to the top of the page
+Quote Post
krzesik
post 12.06.2016, 15:25:51
Post #11





Grupa: Zarejestrowani
Postów: 512
Pomógł: 1
Dołączył: 25.08.2012

Ostrzeżenie: (0%)
-----


mam na tę chwilę coś takiego:
  1. $Mdel = mysql_query("SELECT u.Nazwisko_Imie as user, u.Adres as adres FROM uzytkownik AS u
  2. LEFT JOIN uzytkownik_tmp AS u1 ON u.Nazwisko_Imie=u1.Nazwisko_Imie AND u.Adres=u1.Adres WHERE u1.Nazwisko_Imie IS NULL AND u1.Adres IS NULL");
  3.  
  4. while($d = mysql_fetch_array($Mdel))
  5. {
  6. $KasujM = mysql_query("DELETE FROM uzytkownik, uzytkownik_tmp WHERE Nazwisko_Imie='$d[user]' and Adres='$d[adres]'") or die('Błąd zapytania del user all: '.mysql_error());
  7. }


niestety to mi nie działa poprawnie. Jaka jest moja idea:
1. na stronie a.pl uruchamiany jest skrypt
- dane userów lądują w jednej bazie w tabelach uzytkownik i uzytkownik_tmp (tmp dlatego że baza wzorcowa jest na innym srv i nie jestem w stanie porównać danych "w locie")
- dochodzi do zmiany danych np jeden z userów został usunięty w bazie wzorcowej, dane lecą do tabeli uzytkownik_tmp - (ale jest tam jeszcze ten usunięty user) - jak go wywalić?



Problem rozwiązany temat do zmaknięcia
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.05.2025 - 07:50