SQL - zapytanie złożone z 2 warunków 2 tabel

0

Witam. Od wczoraj tworzę stronę w oparciu o bazę danych. Mam dwie tabele. W jednej tabeli mam kolumnę "adres" która przechowuje adresy E-Mail oraz kolumnę "akcja". W drugiej tabeli mam kolumnę "adres" w której znajdują się adresy, które nie powinny być.

Adres z pierwszej tabeli pobieram tak:

SELECT adres FROM tabela1 WHERE akcja = 0 LIMIT 3;

Jak widać pobieram 3 pierwsze adresy z tabela1 których wartość w kolumnie akcja wynosi 0.

select count(*) as count from tabela2 where adres = '$adres'");

Tak pobieram informację o tym czy adres istnieje w tabela2.

Chciałbym móc pobierać 3 pierwsze adresy z tabela1 które NIE ZNAJDUJĄ SIĘ W TABELA2.
Mógłbym prosić o pomoć jak takie coś złożyć w jednym zapytaniu :)

Pozdrawiam.

0

Aktualnie nie mam za bardzo jak sprawdzic sobie zapytan MySQL ale cos na wzor tego powinno zadzialac:

 
SELECT adres FROM tabela1 WHERE akcja = 0 AND adres NOT IN (select adres from tabela2) LIMIT 3;

Poniewaz kolumna adres wystepuje w obu tabelach moze okazac sie, ze trzeba dodac jeszcze aliasowanie. No ale sprawdz najpierw to.

Swoja droga, to Twoje pytanie lepiej pasuje do dzialu "Bazy danych", poniewaz niewiele ma wspolnego z PHP.

0

Wszystko działa :D Dzięki wielkie CI za pomoc :)

0

Witam ponownie :)
Używam aktualnego rozwiązania jednak zastanawiam czy dałoby się jednocześnie w jednym zapytaniu od razu zapisac pod wartość adres jakas zmienna.

Zalozmy ze mam tabele w ktorej są kolumny adres, akcja oraz zajety

uzywam powyzszego zapytania do wyciągnięcia adresu z bazy, a następnie wykonuje drugie zapytanie, które zapisuje w kolumnie zajety że adres został już pobrany, żeby inne skrypty już go nie użyły tylko pobrały sobie kolejny wiersz, który nie jest aktualnie zajęty. Czy dałoby się to zrobić w jednym zapytaniu podczas pobierania wartości?

Pozdrawiam.

0

Na MySQL się nie da. Albo pobierasz dane (SELECT), albo je modyfikujesz (UPDATE).
W innych SZBD może si ę da ;)

0
tk napisał(a):
 
SELECT adres FROM tabela1 WHERE akcja = 0 AND adres NOT IN (select adres from tabela2) LIMIT 3;

dodam tylko że od powyższego zapytania przy dużej ilości danych dużo szybsze powinno być zapytanie:

SELECT t1.adres FROM tabela1 t1 LEFT JOIN tabela2 t2 ON (t1.adres = t2.adres) WHERE t1.akcja = 0 AND t2.adres IS NULL LIMIT 3;
0

I o to mi chodziło, nie da się i trudno :)

Aż tak dużo danych nie mam, w drugiej tabeli około 1500 rekordów. Czas akurat w tym przypadku nie jest dla mnie istotny :) Ale dobrze wiedzieć.

Pozdrawiam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1