Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP] Wyświetlanie wyników większych od dzisiejszej daty
zyluss
post
Post #1





Grupa: Zarejestrowani
Postów: 59
Pomógł: 1
Dołączył: 18.01.2011

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


Witajcie, jeszcze jeden problem się pojawił a mianowicie:
staram się wyświetlić wyniki większe i równe dzisiejszej dacie, próbowałem następująco:

  1. $data_dzis = date("d.m.y");
  2. mysql_query("SELECT * FROM koncerty WHERE $data_dzis < 'data_koncertu' ORDER BY id ASC")


ale niestety nie działa, jeszcze próbowałem z czasem bezpośrednio:

  1. mysql_query("SELECT * FROM koncerty WHERE date_format(curdate(), '%d.%m.%Y') < data_koncertu ORDER BY id ASC")


i otrzymuję wynik który nie uwzględnia tak jakby miesiąca, ponieważ daty mam dodane luty/marzec a wyniki wyświetlają się powyżej 25 marca.
Format daty zapisany w bazie do wyświetlania to dd.mm.yyyy

dziękuje z góry za zainteresowanie smile.gif

Ten post edytował zyluss 25.02.2017, 12:45:40
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 19)
woxala123
post
Post #2





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

Ostrzeżenie: (10%)
X----


  1.  
  2. SELECT * FROM koncerty WHERE NOW() < 'data_koncertu'
Go to the top of the page
+Quote Post
goartur
post
Post #3





Grupa: Zarejestrowani
Postów: 233
Pomógł: 27
Dołączył: 19.10.2014

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


Mysle ze musisz sprawdzis kondycje
  1. CURDATE()

w sql I zrobic cos na zasadzie
  1. WHERE date > CURDATE()
Go to the top of the page
+Quote Post
woxala123
post
Post #4





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

Ostrzeżenie: (10%)
X----


  1. SELECT * FROM koncerty WHERE 'data_koncertu' > date_format(curdate(), '%d/%m/%Y');

ALe to nic też nie daje.
  1. SELECT id, 'i inne kolumny',date_format(data_koncertu, ' %D %M %Y') FROM koncerty WHERE 'data_koncertu' > NOW()
  2.  


Ten post edytował woxala123 25.02.2017, 14:43:24
Go to the top of the page
+Quote Post
zyluss
post
Post #5





Grupa: Zarejestrowani
Postów: 59
Pomógł: 1
Dołączył: 18.01.2011

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


Cytat(woxala123 @ 25.02.2017, 14:13:46 ) *
  1.  
  2. SELECT * FROM koncerty WHERE NOW() < 'data_koncertu'


zmieniłem format daty w bazie na yyyy-mm-dd i wyświetla koncerty które już się odbyły

  1. SELECT * FROM koncerty WHERE 'data_koncertu' > date_format(curdate(), '%Y-%m-%d');


niestety, też wyświetla starsze daty..

może jakoś zapytanie powinno być inaczej sformułowane?

  1. mysql_query("SELECT id, date_format(data_koncertu, '%Y-%m-%d') FROM koncerty WHERE 'data_koncertu' > NOW()")


zwraca: Illegal mix of collations (utf8_polish_ci,COERCIBLE) and (latin1_swedish_ci,NUMERIC) for operation '>'

Ten post edytował zyluss 25.02.2017, 14:46:45
Go to the top of the page
+Quote Post
woxala123
post
Post #6





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

Ostrzeżenie: (10%)
X----


Zastosuj ostatni kod powinno Ci wyświetlać tak
28th January 2018 jeśli masz wpisane w kolumnę datę 28.01.2018.
To jest tylko przykład.

Ja zrobiłem sobie na przykładowej mojej bazie ten kod i działa
  1. SELECT Name, date_format(DATA , ' %D %M %Y') FROM `bimba` WHERE DATA > NOW();
  2.  


Ten post edytował woxala123 25.02.2017, 14:55:08
Go to the top of the page
+Quote Post
zyluss
post
Post #7





Grupa: Zarejestrowani
Postów: 59
Pomógł: 1
Dołączył: 18.01.2011

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


okej, działa poprawnie w zapytaniu:

  1. mysql_query("SELECT * FROM koncerty WHERE data_koncertu >= curdate()")


tylko datę mam w formacie yyyy-mm-dd a docelowo chcę osiągnąć format dd.mm.yyyy

Go to the top of the page
+Quote Post
woxala123
post
Post #8





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

Ostrzeżenie: (10%)
X----


  1. mysql_query("SELECT *,date_format(data_koncertu , ' %d %m %Y') FROM koncerty WHERE data_koncertu >= curdate()")
  2.  

i będziesz miał 25 02 2017

Ten post edytował woxala123 25.02.2017, 15:02:06
Go to the top of the page
+Quote Post
viking
post
Post #9





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Pole DATETIME w bazie zawsze ma format YYYY-MM-DD HH:MM:SS https://dev.mysql.com/doc/refman/5.7/en/datetime.html
Dopiero przy wyświetlaniu powinieneś je formatować. Ale wszystkie operacje porównujące dane masz przeprowadzać właśnie na takim formacie.


--------------------
Go to the top of the page
+Quote Post
woxala123
post
Post #10





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

Ostrzeżenie: (10%)
X----


Czyli już graduated.gif na początku powinneś sobie date wyselekcjonować w zapytaniu jak ma sie pokazywać. thumbsdownsmileyanim.gif

Ten post edytował woxala123 25.02.2017, 15:07:31
Go to the top of the page
+Quote Post
zyluss
post
Post #11





Grupa: Zarejestrowani
Postów: 59
Pomógł: 1
Dołączył: 18.01.2011

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


Cytat(viking @ 25.02.2017, 15:01:59 ) *
Pole DATETIME w bazie zawsze ma format YYYY-MM-DD HH:MM:SS https://dev.mysql.com/doc/refman/5.7/en/datetime.html
Dopiero przy wyświetlaniu powinieneś je formatować. Ale wszystkie operacje porównujące dane masz przeprowadzać właśnie na takim formacie.


no tak dlatego używałem date_format aby z formatować to tak jak chcę aby było wyświetlane.

problem niestety jest nadal (sprawdzałem na datach 24.02 25.02 26.02) natomiast daty 01.03 już nie wyświetla...

wydaje mi się jakby nie uwzględniał miesiąca?

Ten post edytował zyluss 25.02.2017, 16:00:12
Go to the top of the page
+Quote Post
woxala123
post
Post #12





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

Ostrzeżenie: (10%)
X----


Dam ci przykład wraz bazą danych
  1. CREATE TABLE `comments` (
  2. `ID` INT(11) NOT NULL AUTO_INCREMENT,
  3. `Name` VARCHAR(30) NULL DEFAULT NULL,
  4. `Website` VARCHAR(100) NULL DEFAULT NULL,
  5. `Comment` TEXT NULL,
  6. `Email` VARCHAR(50) NULL DEFAULT NULL,
  7. `Data` DATE NOT NULL,
  8. `Ip` VARCHAR(200) NULL DEFAULT NULL,
  9. PRIMARY KEY (`ID`)
  10. )
  11. COLLATE='latin1_swedish_ci'
  12. ENGINE=InnoDB
  13. AUTO_INCREMENT=22
  14. ;
  15.  
  16.  

  1. SELECT *, date_format(Data , ' %d %m %Y') as Data FROM `comments` WHERE Data >= NOW();

Wstaw sobie jakies przykładowe dane i śmiga jak nalezy. I teraz dostosuj sobie do swojego kodu.

Ten post edytował woxala123 25.02.2017, 16:27:51
Go to the top of the page
+Quote Post
zyluss
post
Post #13





Grupa: Zarejestrowani
Postów: 59
Pomógł: 1
Dołączył: 18.01.2011

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


Cytat(woxala123 @ 25.02.2017, 16:26:36 ) *
Dam ci przykład wraz bazą danych
  1. CREATE TABLE `comments` (
  2. `ID` INT(11) NOT NULL AUTO_INCREMENT,
  3. `Name` VARCHAR(30) NULL DEFAULT NULL,
  4. `Website` VARCHAR(100) NULL DEFAULT NULL,
  5. `Comment` TEXT NULL,
  6. `Email` VARCHAR(50) NULL DEFAULT NULL,
  7. `Data` DATE NOT NULL,
  8. `Ip` VARCHAR(200) NULL DEFAULT NULL,
  9. PRIMARY KEY (`ID`)
  10. )
  11. COLLATE='latin1_swedish_ci'
  12. ENGINE=InnoDB
  13. AUTO_INCREMENT=22
  14. ;
  15.  
  16.  

  1. SELECT *, date_format(Data , ' %d %m %Y') as Data FROM `comments` WHERE Data >= NOW();

Wstaw sobie jakies przykładowe dane i śmiga jak nalezy. I teraz dostosuj sobie do swojego kodu.



okej, i teraz w pętli powiedz jak wyświetlasz z formatowaną datę, bo ja wstawiając: ".$r['data_koncertu']." uzyskuje wynik taki jak w bazie a nie taki jak go formatujemy
Go to the top of the page
+Quote Post
woxala123
post
Post #14





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

Ostrzeżenie: (10%)
X----


Wstaw sobie przykładowe dane do bazy którą Ci podałem i gra i huczy.
  1.  
  2. <?php
  3. # FileName="Connection_php_mysql.htm"
  4. # Type="MYSQL"
  5. # HTTP="true"
  6. $hostname_config = "localhost";
  7. $database_config = "boaa";
  8. $username_config = "root";
  9. $password_config = "bim321";
  10. $config = mysql_pconnect($hostname_config, $username_config, $password_config) or trigger_error(mysql_error(),E_USER_ERROR);
  11.  
  12.  
  13.  
  14. $res = mysql_query("SELECT *, date_format(Data , ' %d.%m.%Y') as Data FROM `comments` WHERE Data >= NOW()")
  15. or die('Błąd zapytania');
  16.  
  17. {
  18. /* jeżeli wynik jest pozytywny, to wyświetlamy dane */
  19. {
  20. /* jeżeli wynik jest pozytywny, to wyświetlamy dane */
  21. echo "<table cellpadding=\"2\" border=1>";
  22. while($r = mysql_fetch_assoc($res)) {
  23. echo "<tr>";
  24. echo "<td>".$r['ID']."</td>";
  25. echo "<td>".$r['Data']."</td>";
  26.  
  27.  
  28. }
  29. echo "</table>";
  30. }
  31. ;
  32. }
  33. $num = mysql_num_rows($res);
  34. ?>
  35.  
  36.  


Ten post edytował woxala123 25.02.2017, 18:54:28
Go to the top of the page
+Quote Post
viking
post
Post #15





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


To w jaki sposób wyświetlisz w PHP nie ma żadnego znaczenia. PHP wyświetla datę jako stringa z bazy. Możesz to później jeszcze przekształcać na \DateTime i dalej formatować.
http://sqlfiddle.com/#!9/678e90/4


--------------------
Go to the top of the page
+Quote Post
woxala123
post
Post #16





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

Ostrzeżenie: (10%)
X----


http://sqlfiddle.com/#!9/b5fc69/7
Może być i tak
Go to the top of the page
+Quote Post
viking
post
Post #17





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Tylko co to miało dać? Jak widzisz wybrany jest rekord przestarzały dopóki nie porównasz daty jako Y-m-d


--------------------
Go to the top of the page
+Quote Post
woxala123
post
Post #18





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

Ostrzeżenie: (10%)
X----


To tylko to
http://sqlfiddle.com/#!9/a663f6/27

SELECT * ,date_format(Data , ' %d %m %Y') AS DAT from comments WHERE Data >= CURDATE();
Go to the top of the page
+Quote Post
zyluss
post
Post #19





Grupa: Zarejestrowani
Postów: 59
Pomógł: 1
Dołączył: 18.01.2011

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


Cytat(woxala123 @ 25.02.2017, 18:21:06 ) *
To tylko to
http://sqlfiddle.com/#!9/a663f6/27

SELECT * ,date_format(Data , ' %d %m %Y') AS DAT from comments WHERE Data >= CURDATE();


spójrz, zmień datę w jednej komórce (dziś jest 26.02 więc) na 25.02 czyli koncert który się już odbył i w wyniku normalnie koncert jest dalej wyświetlany

natomiast działa w 100% to do czego doszliśmy razem:

  1. mysql_query("SELECT *, date_format(data_koncertu, '%d %m %Y') FROM koncerty WHERE data_koncertu >= curdate() LIMIT 4")


i dodatkowo zmiana miesięcy na polskie i format daty jaki chcę mieć wyświetlany na stronie:

  1. $data = strtr(date('d F Y', strtotime($r['data_koncertu'])), $miesiace);


Dziękuje wszystkim za pomoc i zaangażowanie smile.gif Pozdrawiam
Go to the top of the page
+Quote Post
woxala123
post
Post #20





Grupa: Zarejestrowani
Postów: 361
Pomógł: 12
Dołączył: 9.01.2010

Ostrzeżenie: (10%)
X----


Nie wiem w jaki sposób dalej Ci to wyświetla ale mnie tu jakoś normalnie wyświetla i pokazuje tylko datę 26.02 oraz 21.03.2017
http://sqlfiddle.com/#!9/fd1674/1
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 Aktualny czas: 20.08.2025 - 05:12