![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 821 Pomógł: 111 Dołączył: 11.09.2006 Skąd: Biała Podlaska Ostrzeżenie: (0%) ![]() ![]() |
Zacząłem dziś bawić się zapytaniami w MySQL i napotkałem jeden problem, oraz pojawiło się w mojej głowie jedno pytanie.
Zacznę od pytania. Czy lepiej pograć dane z MySQL i obrobić je w PHP, a następnie walnąć UPDATE. Chodzi mi tu oczywiście o szybkość i wydajność. A problem mam taki, że mam przykładowo zapytanie:
W jaki sposób mogę odwołać się do tego utworzonego aliasu, jeśli nie pobieram żadnych danych z tabel tylko po postu dla takiej liczby chce ustawić alias. Jeśli ktoś jest taki ciekawski po co mi to, to już tłumaczę (może jest jakieś inne rozwiązanie), chciałbym pobrać kiedy użytkownik zalogował się ostatnio, od aktualnego czasu odjąć ostatnią wizytę i nazwać ja przykładowo roznica_czasu, a następnie operować na tym aliasie. Czyli coś w ten deseń:
-------------------- |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Zdecydowanie lepiej działać od razu na MySQL. Czyli jesli się da jakąś prostą operację wykonać na MySQL to tak rób (po to to jest).
Wyjątkiem może być jakieś naprawdę skomplikowane zapytanie, w którym dodatkowo dajesz dużą funkcjonalność - wtedy przy dużym obciażeniu i obszernej bazie można pomyśleć nad przejściem na PHP ale pamiętaj o jednym - PHP też może być przez to bardzo obciążone... Jeśli masz serwer PHP i MySQL na oddzielnych maszynach to tym bardziej powinno się przerzucić część takiej funkcjonalności na bazę ![]() -------------------- If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;) Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka... |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 42 Pomógł: 3 Dołączył: 14.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Na aliasie możesz operować tylko w danym zapytaniu.
Cytat jeśli nie pobieram żadnych danych z tabel tylko po postu dla takiej liczby chce ustawić alias Select from jest równoznaczny z pobraniem danych z jakiejś tabeli... Może napisz co chcesz konkretnie zrobić z polem roznica_czasu. |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 821 Pomógł: 111 Dołączył: 11.09.2006 Skąd: Biała Podlaska Ostrzeżenie: (0%) ![]() ![]() |
Na aliasie możesz operować tylko w danym zapytaniu. Select from jest równoznaczny z pobraniem danych z jakiejś tabeli... Może napisz co chcesz konkretnie zrobić z polem roznica_czasu. No właśnie chyba się mylisz (lub ja) ponieważ SELECT zwraca niekoniecznie z tabeli, dla przykładu:
Zwróci nam aktualną datę i godzinę oraz przypisze jej alias czas, więc tabela mi do tego nie jest do niczego potrzebna. Co chcę osiągnąć? Zaktualizować gracza bez pomocy php, tylko w mysql. Mam takie pytanie: Kod mysql> SELECT NOW() as teraz, gracze.aktualizacja, (SELECT SUM(produkcja) FROM mapa WHERE gracze.id_gracza=mapa.id_gracza) as produkcja FROM gracze; +---------------------+---------------------+-----------+ | teraz | aktualizacja | produkcja | +---------------------+---------------------+-----------+ | 2012-02-15 12:06:57 | 2012-02-15 10:28:32 | 60 | +---------------------+---------------------+-----------+ 1 row in set (0.00 sec) Teraz posługując się samymi aliasami (chodzi tu głównie o wygodę) chciałbym obliczyć kilka rzeczy: Obliczyć różnicę czasu jaka upłynęła od czasu ostatniej aktualizacji. Obliczyć ile jednostek "wyprodukowano" Pobrać resztę z dzielenia z "produkcji" Resztę z dzielenia odjąć od aktualnego czasu Walnąć UPDATE. Takie coś chciałbym osiągnąć. Tylko za każdym razem pisać formułkę NOW() - gracze.aktualizacja to troszkę męczące i można się trochę pogubić. Mam nadzieję że dobrze określiłem swój problem. -------------------- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 42 Pomógł: 3 Dołączył: 14.02.2012 Ostrzeżenie: (0%) ![]() ![]() |
Chodziło mi o SELECT [...] FROM [...], bo takiej konstrukcji użyłeś w zapytaniu z różnicą czasu.
Tak jak pisałem operowanie na aliasie może się odbywać w ramach jednego zapytania np. Select aaa.alias11 from( Select aa.alias1 as alias11 from ( (Select a.column1 as alias1, a.column2 as alias2 from tabela as a) as aa) aaa) itd. |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 821 Pomógł: 111 Dołączył: 11.09.2006 Skąd: Biała Podlaska Ostrzeżenie: (0%) ![]() ![]() |
Chodziło mi o SELECT [...] FROM [...], bo takiej konstrukcji użyłeś w zapytaniu z różnicą czasu. Tak jak pisałem operowanie na aliasie może się odbywać w ramach jednego zapytania np. Select aaa.alias11 from( Select aa.alias1 as alias11 from ( (Select a.column1 as alias1, a.column2 as alias2 from tabela as a) as aa) aaa) itd. Pomyślałem, potestowałem, poczytałem i to co ja chcę osiągnąć to nic innego jak tworzenie procedur w mysql. Tworze procedurę, w niej odejmowanie jednego selecta od drugiego, zwracanie wyniku i gotowe. Chociaż myślałem, że osiągnę ten efekt przy pomocy samych aliasów. -------------------- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 28.04.2025 - 06:35 |