Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Wyświetlanie wyników większych od dzisiejszej daty
Forum PHP.pl > Forum > Przedszkole
zyluss
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
woxala123
  1.  
  2. SELECT * FROM koncerty WHERE NOW() < 'data_koncertu'
goartur
Mysle ze musisz sprawdzis kondycje
  1. CURDATE()

w sql I zrobic cos na zasadzie
  1. WHERE date > CURDATE()
woxala123
  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.  
zyluss
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 '>'
woxala123
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.  
zyluss
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

woxala123
  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
viking
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.
woxala123
Czyli już graduated.gif na początku powinneś sobie date wyselekcjonować w zapytaniu jak ma sie pokazywać. thumbsdownsmileyanim.gif
zyluss
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?
woxala123
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.
zyluss
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
woxala123
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.  
viking
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
woxala123
http://sqlfiddle.com/#!9/b5fc69/7
Może być i tak
viking
Tylko co to miało dać? Jak widzisz wybrany jest rekord przestarzały dopóki nie porównasz daty jako Y-m-d
woxala123
To tylko to
http://sqlfiddle.com/#!9/a663f6/27

SELECT * ,date_format(Data , ' %d %m %Y') AS DAT from comments WHERE Data >= CURDATE();
zyluss
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
woxala123
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
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.