Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL] Pobieranie rekordów wraz z najwyższą wartością z innej tabeli
The Night Shadow
post
Post #1





Grupa: Zarejestrowani
Postów: 495
Pomógł: 2
Dołączył: 5.02.2006
Skąd: Wrocław

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


Zapytanie pobiera z bazy danych wszystkie rekordy spełniające określone warunki. Każdy rekord ma swój indywidualny numer ID.

Przykłąd:

Tabela: X
Kolumny: X.id, X.nazwa

Tabela: Y
Kolumny Y.id, Y.id_x, Y.ilosc, Y.data

W jaki sposób pobrać w jednym zapytaniu wszystkie rekordy z tabeli X, a zarazem dołączyć do każdego maksymalną ilosc z tabeli Y, oraz ogólną ilość rekordów przyporządkowanych z tabeli Y d tego rekordu?

Mogę to zrobić na piechotę w dwóch zapytaniach, ale zależy mi na sortowaniu...

Zastanawiam się, czy to w ogóle jest możliwe...


--------------------
Programista Stron i Serwisów WWW oraz Aplikacji Internetowych
Specjalista ds. Pozycjonowania Aplikacji Internetowych
Copywriter
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
babejsza
post
Post #2





Grupa: Zarejestrowani
Postów: 407
Pomógł: 1
Dołączył: 4.03.2003
Skąd: warszawa

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


Nie wiem czy chodzi Ci o takie rozwiązanie, ale tak zrozumiałem Twoje pytanie:

  1. SELECT *, (SELECT SUM(ilosc) FROM Y WHERE Y.id_x = X.id) AS suma FROM X ORDER BY suma
Go to the top of the page
+Quote Post
The Night Shadow
post
Post #3





Grupa: Zarejestrowani
Postów: 495
Pomógł: 2
Dołączył: 5.02.2006
Skąd: Wrocław

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


Coś w tym stylu... dzięki wielki smile.gif


Mam jednak jeszcze jedno pytanie. Czy istnieje możliwość, by podczas sortowania puste rekordy wędrowały na koniec? Powiedzmy, że sortujemy według pola kwota rosnąco lub malejąco i powinno być tak

id kwota

1 12
2 13
4 2345
3 22345
10
12
42

A nie tak:

10
12
42
2 13
4 2345
3 22345


--------------------
Programista Stron i Serwisów WWW oraz Aplikacji Internetowych
Specjalista ds. Pozycjonowania Aplikacji Internetowych
Copywriter
Go to the top of the page
+Quote Post
href
post
Post #4





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 29.04.2007

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


Kod
SELECT *, (SELECT SUM(ilosc) FROM Y WHERE Y.id_x = X.id) AS suma FROM X WHERE suma IS NOT NULL ORDER BY suma UNION SELECT *, suma  FROM X WHERE suma IS NULL;


mozna tez wywalic puste wyniki:
Kod
SELECT *, (SELECT SUM(ilosc) FROM Y WHERE Y.id_x = X.id) AS suma FROM X WHERE suma IS NOT NULL ORDER BY suma;


Ten post edytował href 30.04.2007, 09:46:56
Go to the top of the page
+Quote Post
The Night Shadow
post
Post #5





Grupa: Zarejestrowani
Postów: 495
Pomógł: 2
Dołączył: 5.02.2006
Skąd: Wrocław

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


  1. (SELECT aukcje_aukcje.*,
  2.  
  3. (SELECT users_login FROM aukcje_users WHERE users_id = aukcje_maksymalna
  4. LIMIT 1) AS maksymalna
  5.  
  6. FROM aukcje_aukcje WHERE aukcje_id_user = '16' AND aukcje_rozpoczecie_data < '1177951380' AND aukcje_czas_data > '1177951380' AND aukcje_zakonczona = '0' AND EXISTS (SELECT *
  7. FROM aukcje_users WHERE users_id = aukcje_maksymalna)
  8.  
  9. ORDER BY maksymalna ASC, aukcje_czas_data)
  10.  
  11. UNION
  12. (SELECT aukcje_aukcje.*,
  13.  
  14. (SELECT users_login FROM aukcje_users WHERE users_id = aukcje_maksymalna
  15. LIMIT 1) AS maksymalna
  16.  
  17. FROM aukcje_aukcje WHERE aukcje_id_user = '16' AND aukcje_rozpoczecie_data < '1177951380' AND aukcje_czas_data > '1177951380' AND aukcje_zakonczona = '0' AND NOT EXISTS (SELECT *
  18. FROM aukcje_users WHERE users_id = aukcje_maksymalna)
  19. ORDER BY aukcje_czas_data)
  20.  
  21. LIMIT 0, 50


Nad powyższym zapytaniem siedzę już od kilku godzin. Dane pobierane są w sposób jak najbardziej poprawny. Problemem jest jedynie sortiwanie. W momencie kiedy nie ma drugiego zapytania i UNION dane sortują się poprawnie według pola "maksymalna".

W momencie kiedy pojawia się drugie zapytanie coś jest nie tak. Dane są pobierane, ale nie są sortowane. W całym zapytaniu dane z pierwszej jego części pownny się sortować według pola. Nie sortują się.

Co jest nie tak? Już dostaję mętliku w gowie. Pierwsza część zostawiona sama jest ok sortuje się pięknie. Kiedy dorzucić UNION i resztę coś się wali, jakby blokowane było sortowanie w obrębie pierwszego zapytania.

Co z tym zrobić?

Ten post edytował The Night Shadow 30.04.2007, 17:49:54


--------------------
Programista Stron i Serwisów WWW oraz Aplikacji Internetowych
Specjalista ds. Pozycjonowania Aplikacji Internetowych
Copywriter
Go to the top of the page
+Quote Post
Kicok
post
Post #6





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


http://dev.mysql.com/doc/refman/5.0/en/union.html - pisze tam co nieco o ORDER BY


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
The Night Shadow
post
Post #7





Grupa: Zarejestrowani
Postów: 495
Pomógł: 2
Dołączył: 5.02.2006
Skąd: Wrocław

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


LIMIT dodany do każdego zapytania indywidualnie i działa bezbłędnie... jednak tak na chłopski rozum jest to bezsensowne utrudnienie...

dzięki za pomoc! smile.gif


--------------------
Programista Stron i Serwisów WWW oraz Aplikacji Internetowych
Specjalista ds. Pozycjonowania Aplikacji Internetowych
Copywriter
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 - 05:32