Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Złożone zapytanie
Forum PHP.pl > Forum > Bazy danych > MySQL
Wave
Mój problem jest następujący:
Jak wyciągnąć wszystkie rekordy NAME dla których istnieje co najmniej X wartości POSITION mniejszych lub równych Y(n)?
X jest wartością stałą z osobnej tabeli, Y jest wartością zmienną z osobnej tabeli w relacji bezpośredniej z NAME.

Przykład:
  1. POSITION NAME
  2. 1 1
  3. 2 1
  4. 3 1
  5. 4 1
  6. 5 1
  7.  
  8. 1 2
  9. 1 2
  10. 4 2
  11. 4 2
  12. 4 2
  13.  
  14. 99 3
  15. 88 3
  16. 0 3
  17. 2 3
  18. 2 3

  1. Y NAME
  2. 4 1
  3. 3 3
  4. 10 2


Cel:
wyciągnąć NAME takie że :
  • dla NAME=1: Y=4
  • dla NAME=2: Y=3
  • dla NAME=3: Y=10
dla X = 3

Wyniki:
  • 1 (istnieją przynajmniej 3 POSITION mniejsze od 4)
  • 3 (istnieją przynajmniej 3 POSITION mniejsze od 10)


Domyślam się, że potrzeba tu jakiegoś podzapytania tylko nie umiem go skonstruować. Jakieś pomysły?

Jakieś pomysły?
melkorm
Może po prostu podaj struktury tabelek i powiedz dokłądnie co z czym i kiedy, nikt Tobie z palca tego nie napisze bez znajomości przynajmniej struktury. (najlepiej jeszcze jakieś przykładowe dane)
Wave
Proszę bardzo:
  1. --
  2. -- Struktura tabeli dla 'positions'
  3. --
  4.  
  5. CREATE TABLE positions (
  6. position int(11) NOT NULL,
  7. `name` int(11) NOT NULL,
  8. KEY `name` (`name`)
  9. );
  10.  
  11. --
  12. -- Zrzut danych tabeli 'positions'
  13. --
  14.  
  15. INSERT INTO positions (position, name) VALUES
  16. (1, 1),
  17. (2, 1),
  18. (3, 1),
  19. (4, 1),
  20. (5, 1),
  21. (1, 2),
  22. (1, 2),
  23. (4, 2),
  24. (4, 2),
  25. (4, 2),
  26. (99, 3),
  27. (88, 3),
  28. (0, 3),
  29. (2, 3),
  30. (2, 3);
  31.  
  32. -- --------------------------------------------------------
  33.  
  34. --
  35. -- Struktura tabeli dla 'rates'
  36. --
  37.  
  38. CREATE TABLE rates (
  39. `name` int(11) NOT NULL,
  40. rate int(11) NOT NULL,
  41. PRIMARY KEY (`name`)
  42. );
  43.  
  44. --
  45. -- Zrzut danych tabeli 'rates'
  46. --
  47.  
  48. INSERT INTO rates (name, rate) VALUES
  49. (1, 4),
  50. (3, 3),
  51. (2, 10);

Wyciągnąć takie `name` dla których istnieją przynajmniej np. 3 `position` mniejsze od `rate`...
Nikt nie jest w stanie nic wymyslić? sad.gif
melkorm
  1. SELECT r.name
  2. FROM `rates` r
  3. WHERE (
  4.  
  5. SELECT count( * )
  6. FROM positions p
  7. WHERE p.position < r.rate
  8. AND r.name = p.name
  9. ) >=3

Może takie coś, napisałem pierwsze co mi wpadło do głowy winksmiley.jpg
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.