Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Jak pobrać ostatni wynik z wykresu
Forum PHP.pl > Forum > Przedszkole
Lucas88PL
Witam

Na wstępie chciałbym dodać, że do orłów w php i mysql nie należę.
Głowię się nad tym problemem już drugi dzień i nadal nie mogę sobie z tym poradzić. Posiadam na stronie statystyki z ostatnich 7 dni które generują się za pomocą wykresu. Potrzebuję użyć odpowiedniego zapytania aby pokazać tylko ilość odwiedzić z ostatniego dnia ale nie na wykresie. Baza wygląda tak:


Aktualnie wyświetla mi się po zapytaniu wszystkie 7 dni czyli: data: [98, 114, 119, 86, 97, 0] a chcę uzyskać aby wyświetliło ten ostatni dzień (zaznaczone strzałką) czyli w tym wypadku będzie: data: [0]
SmokAnalog
Przechowujesz dane w takim dziwnym formacie? Najlepsze, co możesz zrobić to przerobić bazę tak, żeby każdy dzień był osobnym rekordem.
KsaR
  1. SELECT TRIM(TRAILING ']' FROM SUBSTRING_INDEX(`uniqie_ips`, ',', -1)) `last`
  2. FROM `tabela`;

Musisz zmienić nazwę tabelki.
Jeśli nie działa (a powinno) to:

1. Jak SmokAnalog pisał.

Lub

2. Zajrzyj do manuala:
trim()
substring_index()
SmokAnalog
KsaR moim zdaniem lepiej nie odpowiadać na takie pytania, bo gość na 99% ma źle zaprojektowaną bazę. Potrafię sobie wyobrazić use case dla takiego formatu, ale w tym przypadku to po prostu niewiedza. Zamiast odpowiadać jak coś zrobić (żeby było) lepiej najpierw się zastanowić czy na pewno chcemy to robić.
KsaR
SmokAnalog, no ja to rozumiem podałem rozwiązanie na "póki co"
Bo z czasem sam zobaczy, że coś nie tak. (Pewnie)
I wtedy sobie zmieni strukturę.
"Albo, albo" bo to jego wybór, czy sobie z czasem ułatwi czy nie
__
Takie inne rozwiązanie to jeszcze by mogło być, MySQL 5.7+,
Bez 'data: ' i z użyciem json, dostępnego od MySQL 5.7.
SmokAnalog
Problem w tym, że w taki sposób wbija się komuś złe nawyki, czyli robienie tak, żeby działało. Etap projektowania kodu najlepiej ogarnąć już na początku nauki. Ubolewam nad tym, że tak wiele odpowiedzi na forach pomija ten aspekt i po prostu odpowiadają bez zastanowienia.

Pytanie: Dostałem w prezencie sztylet. Jak pogłaskać nim kota?
Zła odpowiedź: Spróbuj bokiem (sztyletu, nie kota).
Dobra odpowiedź: Nie głaszcz kota sztyletem.
KsaR
Ja jestem zdania że
Cytat
jak sobie pościeli, tak się wyśpi


Ty już napisałeś że ma krzywe łóżko, i lepiej je zmienić. I tu +
Ja dałem prześcieradło na 'póki co', nikogo nie zmuszam żeby coś użył ani nic.
-- choć teraz ma mniej więcej kilka odpowiedzi, na przemyślenie tongue.gif
viking
Pewnego poziomu wiedzy nie przeskoczysz i po prostu przychodzi on z czasem. Lepiej robić coś nawet na początku źle, niż nie robić nic. Tutaj raczej wygląda że powinien to być JSON, nawet w kolumnie tekstowej (ach te możliwości mysql), obrabiany po stronie PHP.
SmokAnalog
viking co się czepiasz, przecież jest już obsługa JSON-a w MySQL - XXI wiek zawitał i tam tongue.gif
viking
Tylko jakby jeszcze zawitał u większości hostingodawców wink.gif
Zresztą jak porównasz możliwości pracy na typie json do Postgresa to w mysql równie dobrze mogło by go nie być.
Lucas88PL
Cytat(SmokAnalog @ 5.11.2016, 09:50:56 ) *
KsaR moim zdaniem lepiej nie odpowiadać na takie pytania, bo gość na 99% ma źle zaprojektowaną bazę. Potrafię sobie wyobrazić use case dla takiego formatu, ale w tym przypadku to po prostu niewiedza. Zamiast odpowiadać jak coś zrobić (żeby było) lepiej najpierw się zastanowić czy na pewno chcemy to robić.


Tak w tym przypadku niewiedza dlatego zakładam temat w takim dziale jak "Przedszkole". Jak wyżej też wspomniałem "Orłem nie jestem" ale pomijając to, że się nie znam wykres generuje się normalnie z tej bazy więc wygląda na to że jest dobra baza do generowania. Zdaję sobie też sprawę, że to co chcę uzyskać baza jest zła. Dodam, że jest to skrypt master boost zapewne będziecie wiedzieć o co chodzi są tam statystki za pomocą wykresu Highcharts z ostatnich 7 dni gdzie, przypomnę chcę aby w osobnym miejscu wyświetlało ten ostatni dzień czyli "dzisiaj".
Teraz to co podał KsaR

Cytat(KsaR @ 5.11.2016, 07:47:13 ) *
  1. SELECT TRIM(TRAILING ']' FROM SUBSTRING_INDEX(`uniqie_ips`, ',', -1)) `last`
  2. FROM `tabela`;

Musisz zmienić nazwę tabelki.
Jeśli nie działa (a powinno) to:


Nie wyświetla się teraz nic, puste pole. Wszystko wygląda tak:

  1. <?php
  2. $res = mysql_query ("SELECT TRIM(TRAILING']' FROM SUBSTRING_INDEX(`uniqie_ips`, ',', -1)) `last` FROM `settings`") OR die(mysql_error());
  3. $row = mysql_fetch_assoc($res);
  4. echo $row['uniqie_ips'];
  5. ?>
  6.  


SmokAnalog
Nie chciałem Ci wypominać, tylko mówię, że lepiej od razu zrobić to jak należy. Chce Ci się poprawić strukturę bazy czy wolisz żeby działało tak jak jest?
Lucas88PL
Ok rozumiem zle to odebrałem.
Boję się tylko jak zmienimy bazę to inne problemy wystąpią których będę musiał szukać. Lepiej może zrobić to w taki sposób jak jest tylko dac odpowiednie zapytanie.
SmokAnalog
Zapytanie, które podał Ci KsaR jest prawidłowe.
Lucas88PL
Jeżeli jest prawidłowe tzn, że jednak trzeba zmienić bazę bo teraz się nic nie wyświetla jak pisałem wyżej..
trueblue
Wynik jest w $row['last'], nie w $row['uniqie_ips'].
Lucas88PL
Właśnie to obczaiłem. Dzięki wszystkim za pomoc smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.