Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Jak wyświetlicz wszystkie dni wpisów?, php + mysql
Saki
post 1.01.2012, 01:50:08
Post #1





Grupa: Zarejestrowani
Postów: 240
Pomógł: 2
Dołączył: 5.12.2010
Skąd: Fulda

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


Mam wpisy z własną datą: http://i.img.itunix.eu/zrzut_ekranu-13-1325378781.png
i z wpisów chce wyświetlicz wszystkie daty w ten sposób:

Dni (jak to zrobić, jakie zapytanie sql?):
21-12-2011
22-12-2011
23-12-2011
24-12-2011
25-12-2011

i gdy klikne na np. "24-12-2011" to wyświetlą się wpisy z tego dnia.
Jak mam zrobić aby wyświetlały się dni?


Teraz mam to:
  1. $query = mysql_query("SELECT *
  2. FROM shouts
  3. ORDER BY YEAR(sysGodzina) DESC, MONTH(sysGodzina) DESC, DAY(sysGodzina) DESC LIMIT 50");
  4.  
  5.  
  6. while($row=mysql_fetch_array($query))
  7. {
  8. $id = $row['id'];
  9. $data = date('d-m-Y', $row['sysGodzina']);
  10.  
  11. echo $id.': '.$data.'<br />';
  12.  
  13.  
  14. }

Ale to wyświetla do każdej wiadomosci datę:
1: 28-12-2011
2: 28-12-2011
3: 28-12-2011
4: 28-12-2011
5: 28-12-2011
6: 28-12-2011
7: 28-12-2011
8: 28-12-2011
9: 28-12-2011
10: 28-12-2011
11: 28-12-2011

a ja chce aby tylko raz pokazało:
28-12-2011
a potem
29-12-2011
30-12-2011
itd

Jak to zrobić?

I na koniec jak wyswietlicz wiadomości np. z dnia 29-12-2011?

Ten post edytował Saki 1.01.2012, 02:59:03


--------------------
Moje serwisy: services.itunix.eu | spytajsie.com

Server: Debian; Desktop: Mac Mini 10.8.1, ArchLinux XFCE
Go to the top of the page
+Quote Post
marcinpruciak
post 1.01.2012, 11:00:47
Post #2





Grupa: Zarejestrowani
Postów: 161
Pomógł: 9
Dołączył: 14.07.2008

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


Co do pierwszego to spróbuj tak:
  1. SELECT *
  2. FROM shouts
  3. ORDER BY YEAR(sysGodzina) DESC, MONTH(sysGodzina) DESC, DAY(sysGodzina) DESC GROUP BY sysGodzinaLIMIT 50


Drugie pytanie
Wystarczy użyć where i czasu
  1. SELECT *
  2.  
  3. FROM shouts
  4.  
  5. WHERE sysGodzina > 'czas początku dnia' AND sysGodzina < 'czas konca dnia'


--------------------
Go to the top of the page
+Quote Post
Saki
post 1.01.2012, 19:49:43
Post #3





Grupa: Zarejestrowani
Postów: 240
Pomógł: 2
Dołączył: 5.12.2010
Skąd: Fulda

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


Cytat(marcinpruciak @ 1.01.2012, 11:00:47 ) *
Co do pierwszego to spróbuj tak:
  1. SELECT *
  2. FROM shouts
  3. ORDER BY YEAR(sysGodzina) DESC, MONTH(sysGodzina) DESC, DAY(sysGodzina) DESC GROUP BY sysGodzinaLIMIT 50



zapytanie SQL:

  1. SELECT *
  2. FROM shouts
  3. ORDER BY YEAR( sysGodzina ) DESC , MONTH( sysGodzina ) DESC , DAY( sysGodzina ) DESC
  4. GROUP BY sysGodzina
  5. LIMIT 0 , 30

MySQL zwrócił komunikat:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BY sysGodzina
LIMIT 0, 30' at line 3

######################################################################


Problem rozwiązany:

  1. $result = mysql_query("SELECT * FROM shouts");
  2.  
  3. $last_date = '';
  4.  
  5. while($row = mysql_fetch_array($result))
  6. {
  7. if($last_date != date("y-m-d", $row['sysGodzina']))
  8. {
  9. $last_date = date("y-m-d", $row['sysGodzina']);
  10. $dd = date("d", $row['sysGodzina']);
  11. $mm = date("m", $row['sysGodzina']);
  12. $yy = date("Y", $row['sysGodzina']);
  13.  
  14. echo '<li> <a href="archiwum.php?d='.$dd.'&m='.$mm.'&y='.$yy.'">'.date("d-m-Y", $row['sysGodzina']).'</a> </li>';
  15. }
  16. }


--------------------
Moje serwisy: services.itunix.eu | spytajsie.com

Server: Debian; Desktop: Mac Mini 10.8.1, ArchLinux XFCE
Go to the top of the page
+Quote Post
Uriziel01
post 2.01.2012, 13:08:19
Post #4





Grupa: Zarejestrowani
Postów: 307
Pomógł: 37
Dołączył: 9.11.2010
Skąd: Zielona Góra

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


Musisz tylko pamiętać że w zdecydowanej większości przypadków silnik BD jest tak zoptymalizowany że wykona powierzone zadania szybciej niż tą samą funkcjonalności realizuje się poprzez silnik PHP. Nie mam pojęcia jak to wygląda przy tak banalnych zapytaniach ale przy jakichkolwiek większych query do bazy zdecydowanie lepiej wykonywać wszelkie wyszukiwania, porównania i sortowania właśnie tam. Może piszę ciut na wyrost ale ostatnio coraz częściej spotykam ludzi którzy naczytali sie jakichś głupot w sieci i teraz np. stronią od 'SORT BY RAND();' zamiast tego wyciągając wszystkie wpisy do PHP i tam losując 5 potrzebnych (nie rzadko z kilku tysięcy dostępnych). Pozdrawiam i przepraszam za (być może) mały offtopic.

Ten post edytował Uriziel01 2.01.2012, 13:10:48
Go to the top of the page
+Quote Post
Sephirus
post 2.01.2012, 13:19:27
Post #5





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Cytat
spotykam ludzi, którzy naczytali się jakichś głupot w sieci i teraz np. stronią od 'SORT BY RAND();'


Ok - może dla małych tabelek to jest spoko ale faktycznie dla sporych objętościowo tabel używanie ORDER BY RAND() w jakichś częstych zapytaniach potrafi powalić wydajność na kolana smile.gif Chyba, że masz jakiś na to super sposób tongue.gif Ogólnie wystarczy się przyjrzeć zapytaniu dając EXPLAIN i zobaczyć, że ta operacja obejmuje wszyściutkie wiersze i jeszcze je sortuje... To nie może być wydajne - chociaż pobieranie wszystkiego i losowanie też mija się z celem wink.gif


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
Uriziel01
post 2.01.2012, 13:26:51
Post #6





Grupa: Zarejestrowani
Postów: 307
Pomógł: 37
Dołączył: 9.11.2010
Skąd: Zielona Góra

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


Nie zupełnie chcem tutaj nadal kontynuować ten offtop ale OK wink.gif
Oczywiście że 'ORDER BY RAND()' jest nie wydajne dla dużych baz ze względu na tymczasowe tablice które tworzy. Ale można to bez problemu zastąpić na sto różnych sposobów [zakładając spójność indeksów tablicy nawet przez IN (X,Y,Z)]. Ale nie to miałem na myśli pisząc tamten post, chodziło mi o przerzucanie ciężaru obsługi danych na PHP co jest znacznym ciosem w wydajność.
Wystarczy wpisać w 'popularną wyszukiwarkę' frazę 'ORDER BY RAND' aby przekonać się ilu ludzi trapi tak pozornie banalny problem.

P.S-Albo użyć genialnego rozwiązania którym jest Sphinx, którego ze swojej strony gorąco polecam. Nie istnieje moim zdaniem lepszy silnik wyszukiwania pod SQL'a. Wydajność powala dosłownie na kolana.

Ten post edytował Uriziel01 2.01.2012, 13:30:49
Go to the top of the page
+Quote Post
Sephirus
post 2.01.2012, 13:37:55
Post #7





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


No i ok tu się z Tobą zgadzam w 100% smile.gif A co do Sphinx'a to stara dobra Lucynka też jeszcze sobie radzi wink.gif

ok kończymy off-topic wink.gif


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
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: 14.08.2025 - 15:21