Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Wyszukiwanie nieistniejących danych z DRUGIEJ..., Jak oddzielić nieistniejące dane z DRUGIEJ tabeli
Andrzej1002
post 17.07.2017, 14:18:20
Post #1





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 12.03.2010

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


W bazie MySQL'a mam dwie tabele:

W tabeli "1" mam kolumny gdzie m.in. jest kolumna "Pozycja" --- pozycje są czterocyfrowe w różnej kolejności a jest ich nie więcej niż 150

W tabeli "2" mam kolumny gdzie m.in. jest kolumna "Numer" --- pozycje są czterocyfrowe w różnej kolejności a jest ich nie więcej niż 70

liczby z tabeli "2" są powtórzeniem liczb z tabeli "1" ale nie są powtórzone wszystkie


Potrzebuję W PROSTY SPOSÓB, bez powtórzeń, wyświetlić na ekranie pozycje, które są w tabeli "1" ale NIE MA ich w DRUGIEJ...


Można robić to przerabiając np (ale nie wiem jak w PROSTY SPOSÓB przenieść tam dane z MySQL'a) poniższy układ:

  1. $tablica2 = array(22, 1200, 345, 1004, 1523);
  2. $tablica1 = array(1001, 1003, 1004, 1008, 1011, 1022, 1027, 1028, 1031, 1033, 1034, 1036, 1039, 1040, 1041, 1042, 1044, 1047, 1048, 1049, 1050, 1052, 1053, 1062, 1063, 1065, 122, 1066, 1067, 1068, 1070, 1072, 1073, 1074, 1077, 1078, 1084, 1085, 1086, 1087, 1088, 1089);
  3. $wynikBBB = array_diff($tablica1, $tablica2);
  4.  
  5. echo "<pre>";
  6. print_r($wynikBBB);
  7. echo "</pre>";


oraz wyświetla się jednak w NIEczytelny sposób...

Zupełnie się zamotałem. Próbowałem z JOIN'ami i wzystko byłoby OK gdybym szukał powtórzeń a nie odwrotnie...

Pozdrawiam
Go to the top of the page
+Quote Post
nospor
post 17.07.2017, 14:23:40
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  1. SELECT tabela1.* FROM tabela1
  2. LEFT JOIN tabela2 ON tabela1.Pozycja = tabela2.Numer
  3. WHERE tabela2.Numer IS NULL


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Andrzej1002
post 17.07.2017, 16:49:21
Post #3





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 12.03.2010

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


Dzięki za rozjaśnienie w głowie... bo nie wziąłem pod uwagę, że moje dalsze obwarowania datą (o czym wcześniej nie napisałem) nie powodują zatrzymania szukania w tych datach:

  1. SELECT tabela1.* FROM tabela1
  2. LEFT JOIN tabela2 ON tabela1.Pozycja = tabela2.Numer
  3. WHERE tabela2.Numer IS NULL AND tabela2.Miesiac = 06 AND tabela2.Rok = 2017


Rezultat jest zerowy bowiem prawdopodobnie szuka całą "tabelę2" od jej początku istnienia a tam zapewne znajduje wszystkie numery wyszczególnione w "tabeli1". Mnie zaś interesuje tylko fragment za ostatni miesiąc bieżącego roku (nie napisałem - przepraszam). Jak to ograniczyć questionmark.gif Tak jak napisałem daje rezultat zerowy ...
Go to the top of the page
+Quote Post
trueblue
post 17.07.2017, 16:56:13
Post #4





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Warunek daty nie może dotyczyć tabeli2, bo szukasz przecież "braków rekordów". Skoro ich nie ma, to bym bardziej nie spełnią tego warunku.


--------------------
Go to the top of the page
+Quote Post
Andrzej1002
post 17.07.2017, 17:11:12
Post #5





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 12.03.2010

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


To prawda. Odwrócenie tabel w "JOIN" nic nie da... I nie wiem jak to ugryźć. Próbowałem z " UNION " ale też coś nic się nie klei. To musi być proste ... ale nie przychodzi mi nic do głowy.
Go to the top of the page
+Quote Post
trueblue
post 17.07.2017, 17:18:08
Post #6





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


Warunek nie powinien być czasem na tabeli1?


--------------------
Go to the top of the page
+Quote Post
Andrzej1002
post 17.07.2017, 17:52:45
Post #7





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 12.03.2010

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


"tabela1" jest właściwie tabelą stałą, zawiera trochę ponad sto numerów i rzadko się zmienia w niej cokolwiek. Zmiany (comiesięczne) są tylko w "tabela2" ale interesuje mnie ostatni miesiąc bo reszta to tylko historia.
Aby przyspieszyć działanie mógłbym dopisać warunek o ID aby brał pod uwagę nie więcej niż MAX-100 ale to już szczegół.
Go to the top of the page
+Quote Post
nospor
post 17.07.2017, 18:03:25
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Zrozum w koncu, ze masz teraz blad logiczny

Skoro w tabela1 szukasz rekordow, ktorych nie ma w tabela2 to jak mozesz ich szukac po dacie w tabela2 skoro ich nie ma....

Chyba, ze tobie chodzi o cos takiego

  1. SELECT tabela1.* FROM tabela1
  2. LEFT JOIN tabela2 ON (tabela1.Pozycja = tabela2.Numer AND tabela2.Miesiac = 06 AND tabela2.Rok = 2017)
  3. WHERE tabela2.Numer IS NULL


Tudziez tak
  1. SELECT tabela1.* FROM tabela1
  2. LEFT JOIN tabela2 ON (tabela1.Pozycja = tabela2.Numer AND tabela2.Miesiac <> 06 AND tabela2.Rok <> 2017)
  3. WHERE tabela2.Numer IS NULL


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Andrzej1002
post 17.07.2017, 19:57:31
Post #9





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 12.03.2010

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


Dokładnie o to chodziło. Mówiłem, że mnie coś przyMuliło... całkowicie wyleciały mi z głowy nawiasy. Jest OK.
Dzięki Ci baaardzo. Zresztą dzięki Wam wszystkim.
Go to the top of the page
+Quote Post
Pyton_000
post 17.07.2017, 21:05:04
Post #10





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Nawiasy akurat nie mają tu najmniejszego znaczenia wink.gif
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: 15.08.2025 - 02:25