Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zapytanie - dwie tab. maks. ze zbioru wartości
MySQL
post
Post #1





Grupa: Zarejestrowani
Postów: 71
Pomógł: 4
Dołączył: 3.06.2008

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


Mam takie tabele (taki pseudokod):
  1. TABLE tabelaA
  2. a_id INT UNSIGNED PRIMARY KEY
  3. a_name VARCHAR(255) (jakiś tekst)
  4. a_blocked TINYINT UNSIGNED (0 = zablokowany, 1 = odblokowany)
  5. a_priority INT UNSIGNED (im mniejsza liczba tym wyżej w pozycji)
  1. TABLE tabelaB
  2. b_id INT UNSIGNED PRIMARY KEY
  3. a_id INT UNSIGNED FOREIGN KEY (połączony z kluczem głównym poprzedniej tabeli)
  4. b_name VARCHAR(255) (jakiś tekst)
  5. b_date INT UNSIGNED (w postaci UNIXOWEGO znacznika czasu)
  6. b_blocked TINYINT UNSIGNED (0 = zablokowany, 1 = odblokowany)
  7. b_priority INT UNSIGNED (im mniejsza liczba tym wyżej w pozycji)


Teraz jak zadać zapytanie aby otrzymać:
1. a_id, a_name, b_id, b_name
2. te wiersze, które po złączeniu oba są odblokowane
3. uporządkowanie wg priorytetów (najpierw wg priorytetu z tabeli tabelaA)
I najważniejsze czyli to z czym sobie nie mogę poradzić:
4. Po złączeniu ON a.a_id = b.a_id każdy oblokowany wiersz z tabeliA ma się łączyć dokładnie z jednym odblokowanym wierszem z tabeliB (o ile taki istnieje - dlatego dałem INNER JOIN) w taki sposób, że będzie to ten wiersz wybrany z tabeliB, którego data (kolumna b_date) jest największa.

Punkty 1+2+3 potrafię zrobić:
  1. SELECT a.a_id, a.a_name, b.b_id, b.b_name
  2. FROM tabelaA AS a
  3. INNER JOIN tabelaB AS b
  4. ON a.a_id = b.a_id
  5. AND a_blocked = 1
  6. AND b_blocked = 1
  7. ORDER BY a_priority ASC, b_priority ASC

Myślałem o jakiś podzapytaniach ale moje myślenie spełzło na niczym : /

Ten post edytował MySQL 26.08.2009, 19:29:36


--------------------
Pozdrawiam serdecznie
Krzysiek
Go to the top of the page
+Quote Post

Posty w temacie


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 Aktualny czas: 20.08.2025 - 16:41