Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Wyszukiwanie nieistniejących danych z DRUGIEJ...
Forum PHP.pl > Forum > Przedszkole
Andrzej1002
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
nospor
  1. SELECT tabela1.* FROM tabela1
  2. LEFT JOIN tabela2 ON tabela1.Pozycja = tabela2.Numer
  3. WHERE tabela2.Numer IS NULL
Andrzej1002
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 ...
trueblue
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.
Andrzej1002
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.
trueblue
Warunek nie powinien być czasem na tabeli1?
Andrzej1002
"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ół.
nospor
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
Andrzej1002
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.
Pyton_000
Nawiasy akurat nie mają tu najmniejszego znaczenia wink.gif
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.