Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Jak pominąc duplikaty w pętli
nos150
post 4.01.2024, 13:07:15
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 7.04.2022

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


Tak jak w temacie napisałem kod żeby wyodrębnić dany rok i miesiąc ale jak pominąć duplikaty
  1. $druki_query = mysqli_query($con, "SELECT * FROM prace WHERE user_id ='{$_SESSION["current_user"]}' ");
  2. while($druki=mysqli_fetch_array($druki_query)) {
  3. $date = substr($druki['data_'], 0, 7);
  4. $miesiac = substr($druki['data_'], 5, 2);
  5. $rok = substr($druki['data_'], 0, 4);
  6.  
  7.  
  8. echo '<a href="a4.php?date_start='.$rok.'-'.$miesiac.'-01&date_end='.$rok.'-'.$miesiac.'-'.iledni($rok, $miesiac).'" target="_blank">'.$rok.'-'.$miesiac.'</a><br>';
  9.  
  10. }
  11.  


Ten post edytował nos150 4.01.2024, 13:08:05
Go to the top of the page
+Quote Post
Salvation
post 4.01.2024, 15:28:29
Post #2





Grupa: Zarejestrowani
Postów: 357
Pomógł: 70
Dołączył: 15.07.2014

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


1. Skoro potrzebujesz tylko kolumny "data_", to po co pobierasz wszystkie (*) przez SQL?
2. Kolumna "data_" ma format DateTime?
3. Możesz spróbować takiego zapytania:
  1. SELECT DISTINCT `data_` FROM `prace` WHERE `user_id` = '{$_SESSION["current_user"]}'
Go to the top of the page
+Quote Post
nos150
post 4.01.2024, 16:46:03
Post #3





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 7.04.2022

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


Kolumna data_ zawiera:
2023-04-12
2023-04-13
2023-04-14
2023-06-01
2023-06-02
2023-06-06 itd

A chciałbym uzyskać coś takiego:
2023-04
2023-06

To co napisałeś nie nadaje, bo jak widzisz kolumna data_ tak naprawdę nie zawiera duplikatów.
Go to the top of the page
+Quote Post
trueblue
post 5.01.2024, 07:34:15
Post #4





Grupa: Zarejestrowani
Postów: 6 762
Pomógł: 1822
Dołączył: 11.03.2014

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


  1. SELECT DISTINCT DATE_FORMAT(data_,'%Y-%m') AS DATA
  2. FROM `prace`
  3. WHERE `user_id` = '{$_SESSION["current_user"]}'



--------------------
Go to the top of the page
+Quote Post
Tomplus
post 5.01.2024, 18:43:47
Post #5





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

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


Polecam propozycję @trueblue.

Alternatywnie,
zamiast używać substr, użyj explode.

  1. $data = explode('-', $druki['data_']);
  2. echo sprintf("%d-%d", $data[0], $data[1]);
Go to the top of the page
+Quote Post
Salvation
post 21.01.2024, 14:09:36
Post #6





Grupa: Zarejestrowani
Postów: 357
Pomógł: 70
Dołączył: 15.07.2014

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


Cytat(Tomplus @ 5.01.2024, 18:43:47 ) *
Alternatywnie,
zamiast używać substr, użyj explode.

  1. $data = explode('-', $druki['data_']);
  2. echo sprintf("%d-%d", $data[0], $data[1]);


Po co? "date_" jest pełnoprawną datą, więc wystarczy:
  1. $date = DateTimeImmutable::createFromFormat('Y-m-d', $druki['data_']) ?: null;
  2. echo $date?->format('Y-m') ?? '';

Manual: https://www.php.net/manual/en/datetimeimmut...efromformat.php

Ten post edytował Salvation 21.01.2024, 14:09:45
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: 24.05.2024 - 10:09