![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 11.07.2005 Ostrzeżenie: (0%) ![]() ![]() |
Panowie mam pytanie;
Czy da się połączyć do jednego zapytania takie klika zapytań z wieloma warunkami: SELECT pozycja FROM pozycje WHERE id_domeny=272 AND id_slowa=9395 ORDER BY data DESC LIMIT 1,1; SELECT pozycja FROM pozycje WHERE id_domeny=272 AND id_slowa=9395 AND data < DATE_SUB( NOW() , INTERVAL 1 WEEK ) ORDER BY data DESC LIMIT 1; SELECT pozycja FROM pozycje WHERE id_domeny=272 AND id_slowa=9395 AND data < DATE_SUB( NOW() , INTERVAL 2 WEEK ) ORDER BY data DESC LIMIT 1; SELECT pozycja FROM pozycje WHERE id_domeny=272 AND id_slowa=9395 AND data < DATE_SUB( NOW() , INTERVAL 3 WEEK ) ORDER BY data DESC LIMIT 1; SELECT pozycja FROM pozycje WHERE id_domeny=272 AND id_slowa=9395 AND data < DATE_SUB( NOW() , INTERVAL 1 MONTH ) ORDER BY data DESC LIMIT 1; SELECT pozycja FROM pozycje WHERE id_domeny=272 AND id_slowa=9395 AND data < DATE_SUB( NOW() , INTERVAL 2 MONTH ) ORDER BY data DESC LIMIT 1; SELECT pozycja FROM pozycje WHERE id_domeny=272 AND id_slowa=9395 AND data < DATE_SUB( NOW() , INTERVAL 3 MONTH ) ORDER BY data DESC LIMIT 1; SELECT pozycja FROM pozycje WHERE id_domeny=272 AND id_slowa=9395 AND data < DATE_SUB( NOW() , INTERVAL 5 MONTH ) ORDER BY data DESC LIMIT 1; SELECT pozycja FROM pozycje WHERE id_domeny=272 AND id_slowa=9395 AND data < DATE_SUB( NOW() , INTERVAL 6 MONTH ) ORDER BY data DESC LIMIT 1; Chce wyciągnąć to wszystko za jednym razem. |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 1 Dołączył: 3.03.2017 Ostrzeżenie: (0%) ![]() ![]() |
UNION
Czyli łączysz te zapytania w jedno, przedzielając je operatorem UNION. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 11.07.2005 Ostrzeżenie: (0%) ![]() ![]() |
OK, ale to wyjdzie na coś podobnego jak teraz. Te zapytania pracują w starym skrypcie PHP 5.2 + MySQL z mysql_query, ktora już dawno jest deprecated, stąd są też tam stare rozwiązania. Skrypt generuje mega dużo zapytań i troszkę zmula. Chodzi mi o zmniejszenie ilości zapytań i ewentualne przyspieszanie działania z tego powodu.
W kodzie wygląda to np tak: $z4 = "SELECT pozycja FROM pozycje WHERE id_slowa=$id_slowa ORDER BY data DESC LIMIT 1,1"; $q4 = mquery( $z4 ) or die( mysql_error() ); $w4 = mysql_fetch_array( $q4 ); $pozycja_poprzednia = $w4['pozycja']; $z5 = "SELECT pozycja FROM pozycje WHERE id_slowa=$id_slowa AND data < DATE_SUB( NOW() , INTERVAL 1 WEEK ) ORDER BY data DESC LIMIT 1"; $q5 = mquery( $z5 ) or die( mysql_error() ); $w5 = mysql_fetch_array( $q5 ); $pozycja_1_tygodnie = $w5['pozycja']; $z7 = "SELECT pozycja FROM pozycje WHERE id_slowa=$id_slowa AND data < DATE_SUB( NOW() , INTERVAL 2 WEEK ) ORDER BY data DESC LIMIT 1"; $q7 = mquery( $z7 ) or die( mysql_error() ); $w7 = mysql_fetch_array( $q7 ); i tak dalej. Dla wielu słów i wielu dat mam mega dużo zapytań, więc jeśli istnieje możliwość, chciałbym wydobyć je jednym zapytaniem, lub jak najmniejszą ilością zapytań. Dzięki. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Dostałeś przecież rozwiązanie...
I masz 1 zapytanie. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 5 Pomógł: 0 Dołączył: 11.07.2005 Ostrzeżenie: (0%) ![]() ![]() |
OK dziękuję - przetestuję.
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 17:00 |