Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Złożone zapytanie
Wave
post
Post #1





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 13.01.2005

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


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?

Ten post edytował Wave 12.10.2010, 22:44:40
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
melkorm
post
Post #2





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


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)


--------------------
Go to the top of the page
+Quote Post
Wave
post
Post #3





Grupa: Zarejestrowani
Postów: 332
Pomógł: 6
Dołączył: 13.01.2005

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


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

Ten post edytował Wave 27.10.2010, 18:33:54
Go to the top of the page
+Quote Post
melkorm
post
Post #4





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


  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


--------------------
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 Aktualny czas: 19.08.2025 - 21:08