Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Wyciąganie dowolnego fragmentu danych z pola "data"
tromarek1
post 3.08.2017, 20:20:04
Post #1





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 4.03.2010

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


Nie wiem jak dokładnie opisać swój problem. Dodaję nową funkcjonalność do kalendarza, ale nigdy się nie spotkałem z takim sposobem zapisu danych. Otóż mam Tabelę o nazwie dopbsp_days.
Wewnątrz niej unique_id, calendar_id, day, year, data, price_min, price_max.

Rekordy wewnątrz data prezentują się mniej-więcej w następujący sposób:
  1. {"available":20,
  2. "bind":0,
  3. "hours":{
  4. "00:00":{"available":1,"bind":0,"info":"","notes":"","price":5,"promo":0,"status":"available"},
  5. "01:00":{"available":1,"bind":0,"info":"","notes":"","price":5,"promo":0,"status":"available"},
  6. "02:00":{"available":1,"bind":0,"info":"","notes":"","price":5,"promo":0,"status":"available"},
  7. "03:00":{"available":1,"bind":0,"info":"","notes":"","price":5,"promo":0,"status":"available"},
  8. "04:00":{"available":1,"bind":0,"info":"","notes":"","price":5,"promo":0,"status":"available"},
  9. "05:00":{"available":1,"bind":0,"info":"","notes":"","price":5,"promo":0,"status":"available"},
  10. "06:00":{"available":1,"bind":0,"info":"","notes":"","price":5,"promo":0,"status":"available"},
  11. "07:00":{"available":0,"bind":0,"info":"","notes":"","price":"","promo":"","status":"booked"},
  12. "08:00":{"available":0,"bind":0,"info":"","notes":"","price":"","promo":"","status":"booked"},
  13. "09:00":{"available":0,"bind":0,"info":"","notes":"","price":"","promo":"","status":"booked"},
  14. "10:00":{"available":1,"bind":0,"info":"","notes":"","price":5,"promo":"","status":"available"},
  15. "11:00":{"available":1,"bind":0,"info":"","notes":"","price":5,"promo":0,"status":"available"},
  16. "12:00":{"available":1,"bind":0,"info":"","notes":"","price":5,"promo":0,"status":"available"},
  17. "13:00":{"available":1,"bind":0,"info":"","notes":"","price":5,"promo":0,"status":"available"},
  18. "14:00":{"available":1,"bind":0,"info":"","notes":"","price":5,"promo":0,"status":"available"},
  19. "15:00":{"available":1,"bind":0,"info":"","notes":"","price":5,"promo":0,"status":"available"},
  20. "16:00":{"available":1,"bind":0,"info":"","notes":"","price":5,"promo":0,"status":"available"},
  21. "17:00":{"available":1,"bind":0,"info":"","notes":"","price":5,"promo":0,"status":"available"},
  22. "18:00":{"available":1,"bind":0,"info":"","notes":"","price":5,"promo":0,"status":"available"},
  23. "19:00":{"available":1,"bind":0,"info":"","notes":"","price":5,"promo":0,"status":"available"},
  24. "20:00":{"available":1,"bind":0,"info":"","notes":"","price":5,"promo":0,"status":"available"},
  25. "21:00":{"available":1,"bind":0,"info":"","notes":"","price":5,"promo":0,"status":"available"},
  26. "22:00":{"available":1,"bind":0,"info":"","notes":"","price":5,"promo":0,"status":"available"},
  27. "23:00":{"available":0,"bind":0,"info":"","notes":"","price":0,"promo":0,"status":"none"}},
  28. "hours_definitions":[{"value":"00:00"},
  29. {"value":"01:00"},
  30. {"value":"02:00"},
  31. {"value":"03:00"},
  32. {"value":"04:00"},
  33. {"value":"05:00"},
  34. {"value":"06:00"},
  35. {"value":"07:00"},
  36. {"value":"08:00"},
  37. {"value":"09:00"},
  38. {"value":"10:00"},
  39. {"value":"11:00"},
  40. {"value":"12:00"},
  41. {"value":"13:00"},
  42. {"value":"14:00"},
  43. {"value":"15:00"},
  44. {"value":"16:00"},
  45. {"value":"17:00"},
  46. {"value":"18:00"},
  47. {"value":"19:00"},
  48. {"value":"20:00"},
  49. {"value":"21:00"},
  50. {"value":"22:00"},
  51. {"value":"23:00"}],
  52. "info":"info"
  53. ,"notes":"",
  54. "price":5,
  55. "promo":0,
  56. "status":"available"}


Dla mnie szok, że te dane nie są w oddzielnych kolumnach. Nigdy się z czymś takim nie spotkałem. Żaden z poradników, który czytałem nie wspominał nawet, że tak można. Ale do sedna.
Chciałbym móc edytować te dane za pomocą kodu PHP(powiedzmy, że chciałbym np. zmienić o godzinie 15:00 dostępność[available] na wartość "0", status na "booked" i zmienić ["available":20] na ["available":19]).


Poprosił bym również ewentualnie( lub "i") link do poradnika szczegółowo tłumaczącego jak operować na takich danych.

Byłbym naprawdę wdzieczny. Uczę się, więc proszę o wyrozumiałość smile.gif

Ten post edytował tromarek1 3.08.2017, 20:24:25
Go to the top of the page
+Quote Post
viking
post 4.08.2017, 04:12:26
Post #2





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Json_encode/decode


--------------------
Go to the top of the page
+Quote Post
tromarek1
post 8.08.2017, 13:05:20
Post #3





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 4.03.2010

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



Poprawiłem kod:

DEKODOWANIE:
  1.  
  2.  
  3. $break_hour = '{"available":"20","bind":0,"hours":{"10:00":{"available":1,"bind":0,"info":"","notes":"","price":0,"promo":0,"status":"none"},"11:00":{"available":0,"bind":0,"info":"","notes":"","price":0,"promo":0,"status":"none"}},"hours_definitions":[{"value":"10:00"},{"value":"11:00"}],"info":"Taniutko","notes":"","price":0,"promo":0,"status":"none"}';
  4.  
  5.  
  6. $json_decode = json_decode($break_hour);
  7.  
  8.  
  9.  
  10.  
  11. $json_decode->{'available'} = $json_decode->{'available'} -1; //z available = 20 odejmie 1. = available=19; // dostępność -1
  12. echo "Dostępność ogółem: ". $json_decode->{'available'}; // wyświetl zmianę
  13.  
  14.  
  15. $godzina = '10:00';
  16. $wybierz_godzine = $json_decode->{'hours'}->{$godzina}; //wejdź wewnątrz godziny
  17. echo "<br>";
  18. $wybierz_godzine->{'available'} = $wybierz_godzine->{'available'} - 1; //zmień dostępność o 1 wartość do dołu.
  19. echo "Dostępność: ". $wybierz_godzine->{'available'}; // wyświetl dostępność (liczbowo)
  20. echo "<br>";
  21. $wybierz_godzine->{'status'} = 'booked'; //zmień status
  22. echo "Status: ". $wybierz_godzine->{'status'}; // wyświetl nowy status
  23.  





No i teraz przyszedł czas na enkodowanie. No właśnie...

...

Nadal nie wiem jak wprowadzić te nowe dane. Jedyny pomysł jaki mi przychodzi do głowy to pobranie wszystkiego co jest i wprowadzenie dosłownie wszystkiego od początku. Ale czy tak trzeba? Wolał bym wykorzystać mniej kodu.


To forum jeszcze żyje?

Ten post edytował tromarek1 8.08.2017, 13:05:51
Go to the top of the page
+Quote Post
viking
post 8.08.2017, 13:10:06
Post #4





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

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


Po zmianach w obiekcie: var_dump(json_encode($json_decode));

Ten post edytował viking 8.08.2017, 13:13:49


--------------------
Go to the top of the page
+Quote Post
tromarek1
post 8.08.2017, 15:59:30
Post #5





Grupa: Zarejestrowani
Postów: 45
Pomógł: 0
Dołączył: 4.03.2010

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


super. I o to mi właśnie chodziło smile.gif
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 Wersja Lo-Fi Aktualny czas: 19.04.2024 - 05:52