Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> SQL - Konwersja daty
noiragneau
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 11.09.2008

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


  1. <?php
  2. class TerminyService
  3. {
  4.    function TerminyService()
  5.    {
  6.        include("TerminyService.methodTable.php");
  7.        mysql_connect('localhost', 'root', '');
  8.        mysql_select_db('amfphp');
  9. }
  10.  
  11.    function pokazTerminy($dataMiesiac, $dataRok)
  12.  
  13.    {
  14.  
  15.        $sql = sprintf( "SELECT id AS data, CONCAT('Od: ', dataStart, ' Do: ', dataKoniec, ' (', opis, ')') AS label FROM terminy WHERE month(dataStart) >= %d AND year(dataStart) >= %d ORDER BY month(dataStart), day(dataStart)",
  16.                    $dataMiesiac,
  17.                    $dataRok);
  18.        $query = mysql_query($sql);
  19.        NetDebug::trace($sql);
  20.        NetDebug::trace(mysql_error());
  21.        return $query;
  22.  
  23.    }
  24. }
  25. ?>


Witam.

Po wykonaniu zapytania SQL zamieszczonego powyżej dostaje wynik:
Od: 2009-02-02 Do: 2009-02-03 (Konferencja biznesowa)
Od: 2009-03-20 Do: 2009-03-21 (Wesele)

itd

Niestety mam mały problem i tu proszę o pomoc:
Jak zmienić kod aby po zapytaniu SQL wyświetliło się:
Od 2 luty(poniedziałek) do 3 luty(wtorek) - Konferencja biznesowa ?
Go to the top of the page
+Quote Post
kefirek
post
Post #2





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


Proszę
  1. <?php
  2. $data = '2009-02-03';
  3. function data($data){
  4.  
  5. $miesiace = array('01' => 'Styczeń', '02' => 'Luty', '03' => 'Marzec', '04' => 'Kwiecień', '05' => 'Maj', '06' => 'Czerwiec', '07' => 'Lipiec', '08' => 'Sierpień', '09' => 'Wrzesień', '10' => 'Październik', '11' => 'Listopad', '12' => 'Grudzień');  
  6. $dni = array( 0 => 'Niedziela', 1 => 'Poniedziałek', 2 => 'Wtorek', 3 => 'Środa', 4 => 'Czwartek', 5 => 'Piątek', 6 => 'Sobota');
  7.  
  8. $data =  date('j', strtotime($data)).' '.$miesiace[date('m', strtotime($data))].' ( '.$dni[date('w', strtotime($data))].' )';
  9.  
  10. return $data;
  11. }
  12.  
  13. echo data($data);
  14. ?>


Ten post edytował kefirek 8.04.2009, 12:27:40
Go to the top of the page
+Quote Post
noiragneau
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 11.09.2008

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


ale jak to zrobić żeby funkcja brała to sobie z tego SELECTa ?
Go to the top of the page
+Quote Post
kilas88
post
Post #4





Grupa: Zarejestrowani
Postów: 305
Pomógł: 25
Dołączył: 27.01.2007

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


Kod
CONCAT(

  'Od: ',
  DATE_FORMAT(dataStart, '%e %M (%a)'),

  ' Do: ',
  DATE_FORMAT(dataKoniec, '%e %M (%a)'),

  ' (', opis, ')'

) AS label

choć jak na moje to lepiej byłoby przekazywać sztywną datę (dateStart, dateKoniec) do funkcji, którą zapodał kefirek.
Go to the top of the page
+Quote Post
noiragneau
post
Post #5





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 11.09.2008

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


Cytat(kilas88 @ 8.04.2009, 19:05:49 ) *
Kod
CONCAT(

  'Od: ',
  DATE_FORMAT(dataStart, '%e %M (%a)'),

  ' Do: ',
  DATE_FORMAT(dataKoniec, '%e %M (%a)'),

  ' (', opis, ')'

) AS label

choć jak na moje to lepiej byłoby przekazywać sztywną datę (dateStart, dateKoniec) do funkcji, którą zapodał kefirek.

Twój sposób już próbowałem ale wtedy wyświetlają się nazwy po angielskiu a ja potrzebuje po polski.


Tylko nie wiem jak połączyć funkcje kefirka z moim kodem :/
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
a ja potrzebuje po polski.

http://dev.mysql.com/doc/refman/5.0/en/locale-support.html
Go to the top of the page
+Quote Post
noiragneau
post
Post #7





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 11.09.2008

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


Cytat(erix @ 8.04.2009, 19:59:29 ) *




może coś źle robię :/


wykonuje: 

SET lc_time_names = 'pl_PL';

następnie:

SELECT @@lc_time_names;

ale nadal jest:

@@lc_time_names 
en_US



zamiast pl_PL :/
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Mam nadzieję, że to w ramach jednego połączenia wykonujesz, czy kilku osobnych?
Go to the top of the page
+Quote Post
noiragneau
post
Post #9





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 11.09.2008

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


http://dev.mysql.com/doc/refman/5.0/en/locale-support.html było w osobnych

no ale wykonałem razem

SET lc_time_names = 'pl_PL';
SELECT @@lc_time_names;
i zadziałało




jak połączyłem powyższe z moim SELECTEM to wywalało mi błąd z CONCAT :/

jeszcze coś pokombinuje
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Jaki błąd?
Go to the top of the page
+Quote Post
noiragneau
post
Post #11





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 11.09.2008

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


  1. SET lc_time_names = 'pl_PL';
  2. SELECT @@lc_time_names;
  3. SELECT id AS DATA, CONCAT('Od: ', DATE_FORMAT(dataStart, '%d %M'), ' Do: ', dataKoniec, ' (', opis, ')') AS label FROM terminy WHERE month(dataStart) >= 1 AND year(dataStart) >= 2009 ORDER BY month(dataStart), day(dataStart)


wykonuje się poprawnie i wyświetla się:

Od: 02 luty Do: 2009-02-03 (Konferencja biznesowa)



  1. SET lc_time_names = 'pl_PL';
  2. SELECT @@lc_time_names;
  3. SELECT id AS DATA, CONCAT('Od: ', DATE_FORMAT(dataStart, '%d %M'), ' Do: ', DATE_FORMAT(dataKoniec, '%d %M %Y'), ' (', opis, ')') AS label FROM terminy WHERE month(dataStart) >= 1 AND year(dataStart) >= 2009 ORDER BY month(dataStart), day(dataStart)


error: #1271 - Illegal mix of collations for operation 'concat'
Go to the top of the page
+Quote Post
erix
post
Post #12





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. jakie masz kodowanie dla połączenia?
  2. jakie kodowanie dla kolumn?
Powinny być IMHO takie same.
Go to the top of the page
+Quote Post
noiragneau
post
Post #13





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 11.09.2008

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


gdzie to sprawdzić?
Go to the top of the page
+Quote Post
erix
post
Post #14





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. http://dev.mysql.com/doc/refman/5.0/en/charset-connection.html
  2. jeśli używasz PMA, to masz kolumnę zestaw znaków
Go to the top of the page
+Quote Post
noiragneau
post
Post #15





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 11.09.2008

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


PMA: utf8_general_ci

i niby mam ustawione kodowanie na $gateway->setCharsetHandler("iconv", "ISO-8859-2", "ISO-8859-2");

ale na razie wykonuje SELECTy tylko z poziomu bazy danych
Go to the top of the page
+Quote Post
erix
post
Post #16





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A dla kolumn?

[php]setCharsetHandler("iconv", "ISO-8859-2", "ISO-8859-2");[php]
Mhmm, a nie możesz korzystać wszędzie z UTF?
Go to the top of the page
+Quote Post
noiragneau
post
Post #17





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 11.09.2008

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


no rzeczywiście bład był w dekodowaniu.

W phpMyAdmin

  1. "SET lc_time_names = 'pl_PL'; 
  2.   SELECT @@lc_time_names; 
  3.   SELECT id AS data, CONCAT('Od: ', DATE_FORMAT(dataStart, '%d %M'), ' Do: ', 
  4.   DATE_FORMAT(dataKoniec, '%d %M %Y'), ' (', opis, ')') AS label FROM terminy 
  5.   WHERE month(dataStart) >= %d AND year(dataStart) >= %d ORDER BY month(dataStart), day(dataStart)


wyświetliło się poprawnie:
Od: 02 luty Do: 03 luty 2009 (Konferencja biznesowa)




niestety w php już gorzej:/
kod wygląda tak
  1. <?php
  2. class TerminyService
  3. {
  4.  function TerminyService()
  5.  {
  6.      include("TerminyService.methodTable.php");
  7.      mysql_connect('localhost', 'root', '');
  8.      mysql_select_db('amfphp');
  9.  }
  10.  
  11.  function pokazTerminy($dataMiesiac, $dataRok)
  12.  {
  13.      $sql = sprintf("SET lc_time_names = 'pl_PL'; 
  14.      SELECT @@lc_time_names; 
  15.      SELECT id AS data, CONCAT('Od: ', DATE_FORMAT(dataStart, '%d %M'), ' Do: ', 
  16.      DATE_FORMAT(dataKoniec, '%d %M %Y'), ' (', opis, ')') AS label FROM terminy 
  17.      WHERE month(dataStart) >= %d AND year(dataStart) >= %d ORDER BY month(dataStart), day(dataStart)",
  18.                  $dataMiesiac,
  19.                  $dataRok);
  20.      $query = mysql_query($sql);
  21.      NetDebug::trace($sql);
  22.      NetDebug::trace(mysql_error());
  23.      return $query;
  24.  }
  25. }
  26. ?>


Wywala błąd:
(Object)#0
  message = "faultCode:AMFPHP_RUNTIME_ERROR faultString:'sprintf(): Too few arguments' faultDetail:'C:\xampp\htdocs\testZSQL\services\TerminyService.php on line 16'" (powyżej to jest linia 20)

dla php:
$gateway->setCharsetHandler("none", "utf-8", "utf-8");

Ten post edytował noiragneau 9.04.2009, 08:12:25
Go to the top of the page
+Quote Post
pyro
post
Post #18





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Nie można w mysql_query wykonywać kilku zapytań na raz.
Go to the top of the page
+Quote Post
noiragneau
post
Post #19





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 11.09.2008

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


Cytat(pyro @ 9.04.2009, 10:16:02 ) *
Nie można w mysql_query wykonywać kilku zapytań na raz.




po usunięciu 
  1. SET lc_time_names = 'pl_PL'
  2.   SELECT @@lc_time_names;


i wykonaniu tylko
  1. SELECT id AS DATA, CONCAT('Od: ', DATE_FORMAT(dataStart, '%d %M'), ' Do: ',
  2.   DATE_FORMAT(dataKoniec, '%d %M %Y'), ' (', opis, ')') AS label FROM terminy
  3.   WHERE month(dataStart) >= %d AND year(dataStart) >= %d ORDER BY month(dataStart), day(dataStart)


pojawia się ten sam błąd w tym samym miejscu
Go to the top of the page
+Quote Post
erix
post
Post #20





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Wykonaj kilka mysql_query" title="Zobacz w manualu PHP" target="_manual z każdym z zapytań osobno.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 28.08.2025 - 00:41