Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wybieranie rekordow
Forum PHP.pl > Forum > Bazy danych > MySQL
hmmm
chce stworzyc archiwum, takie jak na blogach.
w bazie danych mam tabele notes, a wniej m.in. date, datetime (nazwy kolumn).
chcialbym stworzyc linki do miesiecy, w ktorych pojawily sie jakies notki, jednak zeby miesiace sie nie powtarzaly.
napisalem cos takiego

  1. <?php
  2. require_once ('plik.php');
  3.  
  4. echo &#092;"<table cellspacing=\"0\" cellpadding=\"0\" style=\"margin-bottom: 20px;\">n\";
  5. echo &#092;"<tr>n\";
  6. echo &#092;"<td colspan=\"2\" class=\"mepair\">narchiwumn</td>n\";
  7. echo &#092;"</tr>n\";
  8.  
  9. $query1 = mysql_query(&#092;"SELECT DISTINCT DATE_FORMAT (date, '%y-%m') FROM notes ORDER BY datetime DESC\");
  10. if ($query1) {
  11. while ($row = mysql_fetch_array($query1, MYSQL_NUM)) {
  12. echo &#092;"<tr>n\";
  13. echo &#092;"<td class=\"meleft1\">n-n</td>n\";
  14. echo &#092;"<td class=\"meright1\">n\" . $row[0] . \"n</td>n\";
  15. echo &#092;"</tr>n\";
  16. }
  17.  
  18. } else {
  19. echo &#092;"nie mozna wyswietlic.<br />n\" . mysql_error() . \"n\";
  20. }
  21.  
  22. echo &#092;"</table>nn\";
  23.  
  24. ?>


jednak nie dziala. wartosci w plik.php sa na pewno dobre.
wyswietla mi taki blad:
nie mozna wyswietlic.
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 '(date, '%y-%m') FROM notes ORDER BY datetime DESC' at line 1

jak to poprawic? prosze o pomoc.
mhs
... może ktoś wie ....

masz błąd w zapytaniu - wstawiłeś niepotrzebnie spacje pomiędzy date_format a (

powinno ono tak wygladac:
  1. SELECT DISTINCT DATE_FORMAT(date, '%y-%m')
  2. FROM notes ORDER BY datetime DESC


samo zapytanie powinienes mieć dobrze, gdyż przed chwilą stworzyłem sobie taką tabelę i mniej więc domyślając się przetestowałem zapytanie --> wykonywało się ok, wiec jezeli gdzies sie jeszcze nie pomyliles to jest okey
hmmm
poprawilem, dzieki. nie wiedzialem, ze to chodzi o spacje.
ale teraz zwraca mi kolejdny blad

Kod
nie mozna wyswietlic.
No Database Selected


nie wybrano bazy danych?
skoro mam wszystko zapisane w plik.php i na innych skyptach dziala, to czemu tutaj nie? w pliku mam podane DB_USER, DB_PASSWORD, DB_HOST, DB_NAME, wiec powinno przeciez dzialac.
mozliwe, ze problem tkwi w wersji mysql? mam 4.0.x.
Bakus
mysisz po połączeniu wybrać bazę danych...
  1. <?php
  2. mysql_select_db(&#092;"DB_NAME\");
  3. ?>

ewentualnie zmień zapytanie:
  1. SELECT DISTINCT DATE_FORMAT(date, '%y-%m')
  2. FROM DB_NAME.notes ORDER BY datetime DESC
hmmm
po co jeszcze raz wybierac baze danych?
przeciez mam to wszystko zapisane w plik.php - moj post wyzej.
no ale sprobuje w ten sposob, wybory nie mam ... zastanawia mnie tylko, dlaczego akurat w tym wypadku nie dziala :/
w kazdym badz razie dzieki.
mhs
to w takim badz razie pokaz plik pliki.php
hmmm
oto zawartosc:
  1. <?php
  2. DEFINE ('DB_USER', 'user');
  3. DEFINE ('DB_PASSWORD', 'password');
  4. DEFINE ('DB_HOST', 'localhost');
  5. DEFINE ('DB_NAME', 'blog');
  6.  
  7. $dbc = @mysql_connect (DB_HOST, DB_USER, DB_PASSWORD) OR die ('Nie mozna polaczyc sie z MySQL-em: ' . mysql_error());
  8. mysql_select_db (DB_NAME) OR die ('Nie udalo sie wybrac bazy danych: ' . mysql_error());
  9. ?>


i ... tamten caly kod jest wlasciwie includowany, ale poprawnie - to na 100%.
po dodaniu nazwy bazy danych
  1. <?php
  2. $query1 = mysql_query (&#092;"SELECT DISTINCT DATE_FORMAT(date, '%y-%m') FROM blog.notes ORDER BY datetime DESC\");
  3. ?>

zwraca mi kolejny blad
Kod
nie mozna wyswietlic.
Access denied for user: '@localhost' to database 'blog'
mhs
sprawdz czy dany uzytkownik ma prawo dostepu do bazy danych, sprawdz hasla... najprawdopodobniej tutaj lezy tego przyczyny...
hmmm
przepraszam, ale musialem usunac poprzedniego posta :]
ale ponizej prezentuje jej tresc:

nie, wszystko jest ok pod tym wzgledem.
dany uzytkownik ma wlasciwie wszystkie uprawienia ... no prawie wszystkie.
hasla i dane tez sa dobre, bo jak pisalem - w innych skryptach aby odczytac rekordy z innych tabel wykorzystuje skrypt do polaczenia sie z tym plikiem i wtedy mi nie wyrzuca zadnych bledow - wszystko dziala dobrze.

postanowilem jednak zrobic wszystko od nowa ... no prawie wszystko.
i nareszcie sie udalo! :D
  1. <?php
  2. $yearnow = date('Y');
  3.  
  4. $query3 = mysql_query (&#092;"SELECT DATE_FORMAT(datetime, '%Y') FROM notes GROUP BY datetime LIMIT 1\");
  5. if ($query3) {
  6. while ($row = mysql_fetch_array($query3, MYSQL_NUM)) {
  7. $yearless = $row[0];
  8. }
  9.  
  10. } else {
  11. echo &#092;"nie mozna wyswietlic.<br />n\" . mysql_error() . \"n\";
  12. }
  13.  
  14. $year = $yearnow;
  15.  
  16. echo &#092;"<table cellspacing=\"0\" cellpadding=\"0\" style=\"margin-bottom: 20px;\">n\";
  17.  
  18. for ($yearnow; $year >= $yearless; $year--) {
  19. echo &#092;"<tr>n\";
  20. echo &#092;"<td class=\"fileyear\">n\" . $year . \"n</td>n\";
  21. echo &#092;"</tr>n\";
  22.  
  23. $query4 = mysql_query (&#092;"SELECT DISTINCT DATE_FORMAT(datetime, '%m') FROM notes WHERE DATE_FORMAT(datetime, '%Y') = $year ORDER BY datetime\");
  24. if ($query4) {
  25. while ($row = mysql_fetch_array($query4, MYSQL_NUM)) {
  26. switch ($row[0]) {
  27. case '01':
  28. $month = 'styczen';
  29. break;
  30. case '02':
  31. $month = 'luty';
  32. break;
  33. case '03':
  34. $month = 'marzec';
  35. break;
  36. case '04':
  37. $month = 'kwiecien';
  38. break;
  39. case '05':
  40. $month = 'maj';
  41. break;
  42. case '06':
  43. $month = 'czerwiec';
  44. break;
  45. case '07':
  46. $month = 'lipiec';
  47. break;
  48. case '08':
  49. $month = 'sierpien';
  50. break;
  51. case '09':
  52. $month = 'wrzesien';
  53. break;
  54. case '10':
  55. $month = 'pazdziernik';
  56. break;
  57. case '11':
  58. $month = 'listopad';
  59. break;
  60. case '12':
  61. $month = 'grudzien';
  62. break;
  63. }
  64. echo &#092;"<tr>n\";
  65. echo &#092;"<td class=\"filemonth\">n<a class=\"awhite\" href=\"index.php?file=\" . $year . \"-\" . $row[0] . \"\">\" . $month . \"</a>n</td>n\";
  66. echo &#092;"</tr>n\";
  67. }
  68.  
  69. } else {
  70. echo &#092;"nie mozna wyswietlic.<br />n\" . mysql_error() . \"n\";
  71. }
  72.  
  73. }
  74.  
  75. echo &#092;"</table>nn\";
  76. ?>


datetime to kolumna, w ktorej dane zapisuje w postaci DATETIME.

skrypt wyswietla mi wszystkie lata, w ktorych pojawily sie notki w kolejnosci malejacej a pod kazdym rokiem sa miesiace tego roku, w ktorym pisalem notki - w kolejnosci malejacej (maslo maslane, ale chyba wiadomo o co chodzi).

dzieki za pomoc ;)
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.