Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Dodanie brakujących rekordów
Mega_88
post 28.11.2019, 03:07:00
Post #1





Grupa: Zarejestrowani
Postów: 360
Pomógł: 34
Dołączył: 20.08.2011

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


Cześć, może mi ktoś podpowiedzieć jak mogę zrobić następującą rzecz. Mam tablę gdzie jest między innymi pole date='YYYY-MM-DD' i potrzebuję uzupełnić tabelę od ustalonej daty do dnia dzisiejszego o rekordy z datą, która nie występuje, a pozostałe rekordy mają być puste (NULL / 0 ). Dla przykłady mamy:

  1. id | date | name | price
  2. 1 | 2019-11-02 | Nazwa 1 | 100
  3. 2 | 2019-11-04 | Nazwa 2 | 200
  4. 3 | 2019-11-08 | Nazwa 3 | 150
  5. 4 | 2019-11-26 | Nazwa 1 | 100
  6. 5 | 2019-11-28 | Nazwa 1 | 100 (DZISIAJ)

I potrzebuję uzupełniać braki za każdym razem jak nie będzie rekordu poniżej dnia obecnego
  1. 6 | 2019-11-01 | NULL | 0
  2. 7 | 2019-11-03 | NULL | 0
  3. 8 | 2019-11-05 | NULL | 0
  4. itd


Potrzebuję zapytanie SQL + ewentualnie PHP, który będzie takie braki uzupełniać od dnia 2019-01-01

Ten post edytował Mega_88 28.11.2019, 03:07:33
Go to the top of the page
+Quote Post
Tomplus
post 28.11.2019, 07:11:17
Post #2





Grupa: Zarejestrowani
Postów: 1 831
Pomógł: 225
Dołączył: 20.03.2005
Skąd: Będzin

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


Taki kod uzupełni Ci tabelę na dni na cały rok.
  1. INSERT INTO mytable (date)
  2. SELECT
  3. DATE_ADD('2019-01-01', INTERVAL t.n DAY)
  4. FROM (
  5. SELECT
  6. a.N + b.N * 10 + c.N * 100 AS n
  7. FROM
  8. (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
  9. ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
  10. ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7) c
  11. ORDER BY n
  12. ) t
  13. WHERE
  14. t.n <= TIMESTAMPDIFF(DAY, '2019-01-01', '2019-12-31');


źródło: https://stackoverflow.com/questions/2549394...rom-an-interval

Ten post edytował Tomplus 28.11.2019, 07:11:57
Go to the top of the page
+Quote Post
Mega_88
post 29.11.2019, 02:23:19
Post #3





Grupa: Zarejestrowani
Postów: 360
Pomógł: 34
Dołączył: 20.08.2011

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


Dokładnie o to mi chodziło ! Dziękuje !

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: 16.04.2024 - 23:01