[MySQL][PHP] MAX z przedziału |
[MySQL][PHP] MAX z przedziału |
20.11.2018, 22:11:28
Post
#1
|
|
Grupa: Zarejestrowani Postów: 427 Pomógł: 0 Dołączył: 8.11.2012 Ostrzeżenie: (0%) |
Mam kolejny kłopot.
Powiedzcie mi dlaczego to nie chce mi zadziałać tak jak powinno. Mam kod
Kod powinien oddać najwyższą wartość w polu wiatrsr z danego przedziału zawartego pomiędzy $start a $koniec ale zwraca tylko pierwszą wartość z bazy i nie jest to najwyższa z danego okresu - dlaczego? Takie zapytanie działa prawidłowo
Ale potrzebne mi to w pierwszym kodzie. Sory kod działa ale pokazuje inny błąd. Obecnie najwyższa wartość pobierana w tym przedziale czasowym z bazy danych to wiatrsr = 77 Natomiast sila_wiatru przy 77 daje kolor czerwony a wyświetla z (powinno być czerwony) sila_wiatru pobierana jest jako pierwsza z tego przedziału a nie jak powinno być maksymalna. Jak to naprawić? Ten post edytował brzanek 20.11.2018, 22:38:00 |
|
|
20.11.2018, 22:40:44
Post
#2
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) |
zamiast MAX użyj po prostu
Kod ORDER BY `hwindGust` LIMIT 1
|
|
|
21.11.2018, 07:00:22
Post
#3
|
|
Grupa: Zarejestrowani Postów: 427 Pomógł: 0 Dołączył: 8.11.2012 Ostrzeżenie: (0%) |
Dzięki zadziałało
Ale teraz mam inny problem muszę połączyć kilka wartości w jednym zapytaniu
Tak wywala błąd. Potrzebuję sumę hcloudCover podstawi do nazwa_ikony i jednocześnie wyciągnąć najwyższą wartość htemperature z danego przedziału $start / $koniec |
|
|
21.11.2018, 14:08:35
Post
#4
|
|
Grupa: Zarejestrowani Postów: 286 Pomógł: 46 Dołączył: 10.01.2016 Ostrzeżenie: (0%) |
Ten post edytował Neutral 21.11.2018, 14:11:43 |
|
|
21.11.2018, 21:48:50
Post
#5
|
|
Grupa: Zarejestrowani Postów: 427 Pomógł: 0 Dołączył: 8.11.2012 Ostrzeżenie: (0%) |
Ten kod nie działa. Podstawiłem tam swoje dane ale nic z tego nie wyszło. Nie w nim kilku potrzebnych parametrów takich jak np. htemperature.
Kombinuję kombinuję i nic mi nie wychodzi. Doszedłem do tego
Wartość z SUM(hcloudCover) jest ok ale nie jest dobrze przypisywana do hcloudCover>=di.zachmurzenie_od AND hcloudCover<di.zachmurzenie_do Ten post edytował brzanek 21.11.2018, 21:49:59 |
|
|
21.11.2018, 22:09:14
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Nie będzie działać, bo to, że dałeś alias dla sumy o nazwie kolumny, to nie znaczy, że zostanie podstawiony do klauzuli WHERE.
Poczytaj trochę o SQL - szczególnie jak działają funkcje grupujące w połączeniu z WHERE. Bardzo prawdopodobne, że sumę musisz nałożyć na dodatkowe zapytanie, którego podzapytaniem będzie to z WHERE i zakresami, ale nie wiem, bo nie mam kompletnie pojęcia co chcesz uzyskać. Na pewno czytelność ułatwiłoby trafne dobieranie aliasów dla tabel, np. dla kierunek_wiatru - kw, a nie zt. O aliasach też poczytaj, bo to nie magia, którą musisz przepisywać bezmyślnie z przykładu. -------------------- |
|
|
21.11.2018, 22:16:46
Post
#7
|
|
Grupa: Zarejestrowani Postów: 427 Pomógł: 0 Dołączył: 8.11.2012 Ostrzeżenie: (0%) |
Chcę aby sumowana wartość hcloudCover z przedziału od do (htime BETWEEN '1542830400' AND '1542916800') przypisana była do innej tabeli i zastąpiona odpowiednią wartością z zakresu zachmurzenie_od - zachmurzenie_do
Zamiast sumowanej liczby nazwa ikony np: slonce itp Takie zapytanie
Daje taki wynik Suma zachmurzenia (hcloudCover) = 94 więc ikona powinna być slonce_mala_chmurka a nie samo slonce. Ten post edytował brzanek 21.11.2018, 22:20:32 |
|
|
21.11.2018, 22:34:00
Post
#8
|
|
Grupa: Zarejestrowani Postów: 6 761 Pomógł: 1822 Dołączył: 11.03.2014 Ostrzeżenie: (0%) |
Suma w takim przypadku wykonuje się na rekordach, które zostały ograniczone przez WHERE. Dopiero na nich.
Masz wykonać najpierw zapytanie wiążące zachmurzenie z zakresami, na tym kolejne zapytanie już z sumą i dopiero wykonać ORDER i LIMIT. -------------------- |
|
|
21.11.2018, 22:42:28
Post
#9
|
|
Grupa: Zarejestrowani Postów: 427 Pomógł: 0 Dołączył: 8.11.2012 Ostrzeżenie: (0%) |
Czyli co muszę najpierw to dać
Potem dopiero to drugie? Czy mamto zrobić w jednym zapytaniu w jakiś inny sposób. |
|
|
22.11.2018, 00:18:31
Post
#10
|
|
Grupa: Zarejestrowani Postów: 286 Pomógł: 46 Dołączył: 10.01.2016 Ostrzeżenie: (0%) |
Kod +----+----------+--------------+------+------+-----------+-------+------+-------------+-------------+-----------+----------+ | id | htime | hwindBearing | from | to | hwindgust | from1 | to1 | hcloudcover | clouds_from | clouds_to | hid_city | +----+----------+--------------+------+------+-----------+-------+------+-------------+-------------+-----------+----------+ | 1 | 10:10:20 | 5 | 10 | 4 | 4 | 2 | 1 | 7 | 8 | 9 | 25 | | 2 | 18:17:01 | 90 | 120 | 4 | 6 | 2 | 45 | 7 | 9 | 9 | 15 | | 3 | 22:01:01 | 12 | 12 | 1 | 0 | 3 | 28 | 27 | 55 | 42 | 16 | | 4 | 15:00:00 | 10 | 56 | 6 | 90 | 2 | 1 | 0 | 10 | 60 | 59 | | 5 | 15:00:00 | 57 | 56 | 100 | 90 | 2 | 110 | 0 | 10 | 60 | 59 | +----+----------+--------------+------+------+-----------+-------+------+-------------+-------------+-----------+----------+
Kod *************************** 1. row *************************** hwindBearing: 57 hwindgust: 90 hid_city: 59 htime: 15:00:00 id: 5 clouds_from: 10 clouds_to: 60 id: 3 htime: 22:01:01 hwindBearing: 12 from: 12 to: 1 hwindgust: 0 from1: 3 to1: 28 hcloudcover: 27 clouds_from: 55 clouds_to: 42 hid_city: 16 hcloudcover: 27 Musisz stworzyć po prostu delivered table do tego (poczytaj o tym m.in. w dokumentacji MySQL). Pokazałem Ci kierunek, dalej pisz sam. Napisałem to na jednej tabeli, jeśli chcesz łatwo zmodyfikujesz ten kod na więcej tabel. "\G" na końcu oznacza inne formatowanie rezultatu z zapytania niż standardowe. Jest to pomocne, jeśli tabela się rozjedża lub "nie mieści na ekranie". Ten post edytował Neutral 22.11.2018, 00:27:30 |
|
|
22.11.2018, 08:36:19
Post
#11
|
|
Grupa: Zarejestrowani Postów: 427 Pomógł: 0 Dołączył: 8.11.2012 Ostrzeżenie: (0%) |
Trochę tego nie kumam
AND hid_city = 59) AS vv, brzanek AS brzan WHERE hcloudcover>=vv.clouds_from AND hcloudcover<vv.clouds_to\G Skąd w twoim zapytaniu vv oraz brzan? Nie wiem czy rozumiesz mój problem bo twój przykład chyba nie pokazuje tego co chcę osiągnąć albo ja czegoś tu nie czaję. |
|
|
22.11.2018, 08:59:10
Post
#12
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
-------------------- |
|
|
22.11.2018, 09:51:19
Post
#13
|
|
Grupa: Zarejestrowani Postów: 427 Pomógł: 0 Dołączył: 8.11.2012 Ostrzeżenie: (0%) |
No fajnie tylko powiedzcie mi gdzie ja w tym wszystkim mam użytą funkcję SUM bo właśnie o to mi chodzi.
Podane przez was przykłady do niczego mnie nie prowadzą. |
|
|
22.11.2018, 11:14:56
Post
#14
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
Naprawde nie widzisz SUM w tym zapytaniu?
A to: sum(hcloudcover) AS hcloudcover to niby co? Wrozka zebuszka? -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
22.11.2018, 11:47:16
Post
#15
|
|
Grupa: Zarejestrowani Postów: 427 Pomógł: 0 Dołączył: 8.11.2012 Ostrzeżenie: (0%) |
Faktycznie jest ale mam z tym sposobem problem bo nic mi nie wychodzi.
Myślałem, że może coś takiego zadziała
Ale też błędnie pokazuje nazwe_ikony Za każdym razem pokazuje tylko pierwszą. |
|
|
22.11.2018, 11:59:13
Post
#16
|
|
Grupa: Moderatorzy Postów: 36 455 Pomógł: 6292 Dołączył: 27.12.2004 |
Cytat Za każdym razem pokazuje tylko pierwszą. A ile ma pokazywac jak za kazdym razem w petli nadpisujesz te ikone? -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
22.11.2018, 12:08:32
Post
#17
|
|
Grupa: Zarejestrowani Postów: 286 Pomógł: 46 Dołączył: 10.01.2016 Ostrzeżenie: (0%) |
Alias na delivered table "vv", oznacza odwołanie się do tego rezultatu z zapytania. Napisz sobie w CLI (Command Line Interface) te zapytanie, które ma przypisany alias "vv" i zobaczysz wtedy, że z tych danych wyciągasz tym pierwszym zapytaniem te dane, czyli "*, SUM(hcloudcover) as hcloudcover". Wszystko, czyli "*" wyciągasz z tabeli z przypisanym alias'em. Następnie sumę, ale nie z zapytania z alias'em, tylko już z tabeli "brzanek". Oddaje to ostatni warunek po "WHERE". Weź sumę z tabeli "brzanek" osobno oraz dane z delivered table z przypisanym alias'em "vv" też osobno. Dalej porównaj te dane ze sobą na samym końcu (mówi to klauzula "WHERE" po alias'ie "vv". |
|
|
22.11.2018, 12:57:24
Post
#18
|
|
Grupa: Zarejestrowani Postów: 427 Pomógł: 0 Dołączył: 8.11.2012 Ostrzeżenie: (0%) |
Pewnie macie rację ale zrobiłem to troszkę inaczej
Działa tylko teraz będę miał więcej zapytań do bd. |
|
|
Wersja Lo-Fi | Aktualny czas: 26.04.2024 - 09:52 |