Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php+MySQL] Funkcja NVL czy FNULL
Forum PHP.pl > Forum > Przedszkole
Wykrywacz
Cześć.
Mam proste zapytanie:
  1. <?php
  2.  $patrz_id = mysql_query("select count(pesel),pesel,SUM(NVL(data_rozw,"$data") - data_od) + count(pesel) from daty group by pesel order by count(pesel)")
  3. ?>


W oraclu funkcia NVL sprawdza czy rekord jest pusty jeżeli tak to wstawia w tym wypadku $data, jeżeli nie to zostawia data_rozw.

Ponoć w mysql niema tej funkcji zamiast niej jest FNULL,
Sprawdzałem na sieci i widziałem, że są przykłady z NVL. Niestety tak czy inaczej niechce mi sprawdzać czy data_rozw jest pusta i nie działa skrypt wzwiązku z tym.
nospor
Cytat
zamiast niej jest FNULL,
Muszę cie rozczarować. nie ma FNULL. jest IFNULL smile.gif
http://dev.mysql.com/doc/refman/5.0/en/con...-functions.html
tam masz wszystko co potrzebujesz
a te daty to jakiego są typu ? DATE? Tak sie nie odejmuje dat. dotego jest co innego:
http://dev.mysql.com/doc/refman/5.0/en/dat...-functions.html
Wykrywacz
Znaczy się zrobiłem to w ten sposób, bo daty nie są związane z systemową.
Może jeszcze raz zaczne od początku: (jak to mawiają w reklamach).

Data_rozw i data_od, są importowane z pliku (generwoanego swoją drogą z innego systemu) i zapisywane do bazy.

Potem w formularzu ludek, podaje przez siebie tzw. date obliczeń i to jest ten $data.

Stąd wszystko jest defakto ręcznie robione.

A mam jeszcze pytanie wywala mi
Kod
Parse error: syntax error, unexpected T_VARIABLE in D:\Daty\_debug_tmp.php on line 45

właśnie na tej linijce - czego on sie czepia
nospor
no ok, ale ja ci mowię, ze tak dat sie nie odejmuje jak ty to robisz:
źle:
  1. SELECT '2006-04-12' - '2006-04-10';


dobrze:
  1. SELECT DATEDIFF('2006-04-12', '2006-04-10');


edit:
co do errora:
oj, bo się pogniewamy... widze ze prywatne lekcje na PW poszly w las sad.gif
http://pl.php.net/manual/pl/language.types.string.php
Wykrywacz
Czyli powinno wyglądać to tak:P

  1. <?php
  2. SUM((DATEDIFF(IFNULL(data_rozw,"$data") ,data_od))
  3. ?>


Error?
Przecież mi żadnego błędu nie wyrzucało na tych stringach:P A ja wcale go nie dałem to poprawy biggrin.gif (Już naprawiłem)


Bo te daty nie mogą być wpisane na szywno. Jedyna na sztywno to podawan $data.
nospor
Cytat
Bo te daty nie mogą być wpisane na szywno. Jedyna na sztywno to podawan $data.
Ja ci jako przyklad wykorzystania datediff podalem sztywno daty. ty tam se wstawiaj pola jak chcesz smile.gif

Cytat
Czyli powinno wyglądać to tak:P
nie do konca. jesli nic nie pozmieniasz to ci parse errorami znowu bedzie plulo. polecam linka co ci podalem poprzednio
Wykrywacz
Co dziwne. W manualu jest tak:
Cytat
#

DATEDIFF(expr,expr2)

DATEDIFF() returns the number of days between the start date expr and the end date expr2. expr and expr2 are date or date-and-time expressions. Only the date parts of the values are used in the calculation.

mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');
        -> 1
mysql> SELECT DATEDIFF('1997-11-30 23:59:59','1997-12-31');
        -> -31
// chbya że kwestia przecinka ? w '1997-11-30 23:59:59'

Z tego roumuje ze mój zapis
  1. <?php
  2. SUM((DATEDIFF(IFNULL(data_rozw,$data),data_od)) + count(pesel)
  3. ?>

Jest ok.
Sprawdziłem go przez debuga, w designerze2005 i też nie napisałem mi że cokolwiek jest nie wporzo.
Po próbie wykonia owszem wywaliło mi błędem ale na.
Kod
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 'from daty group by pesel order by count(pesel)' at line


Czyli na fragment
  1. <?php
  2.  $patrz_id = mysql_query("select count(pesel),pesel,SUM((DATEDIFF(IFNULL(data_rozw,$data),data_od)) + count(pesel) [COLOR=red]from daty group by pesel order by count(pesel)")[/COLOR]
  3. ?>


WHY? (jak to stringi to się nie obrażaj winksmiley.jpg - ale ja nie widze i debug też nie widzi)

Jak zrobiłem bez przecinka czyli
  1. <?php
  2. ("select count(pesel),pesel,SUM((DATEDIFF(IFNULL(data_rozw $data),data_od))
  3. ?>
to wywalił
Kod
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 '2006-02-28),data_od)) + count(pesel) from daty group by pesel order by count(pes' at line 1
nospor
ja sie nie obrazam.
skoro na sztywno podajesz jedną datę, no to musi ona byc w ciapkach. jak to data/tekst. W moim z jednych przykladow miales tak napisane. Daty z palca byly w ciapkach, daty jako pola byly bez ciapkow smile.gif (akurat brak ciapkow przy dacie nie powinien byl generowac errorów mysql, ale jedynie blędne wyniki)
  1. <?php
  2.  $patrz_id = mysql_query("select count(pesel),pesel,SUM(DATEDIFF(IFNULL(data_rozw,'$data'),data_od)) + count(pesel) from daty group by pesel order by count(pesel)");
  3. ?>


ps: i nie wkladaj zadnych colorred w kod php, bo to nic nie da
ps2: pozatym miales jeden nawias za duzo. polecam liczyc nawiasy po lewej i po prawej stronie smile.gif (a to wlasnie generowalo ci errora)
Wykrywacz
No a ja skasowałem zanim zobaczyłem twój

Znalazłem ten nawias:)

A teraz wyświatla mi komunikat
Kod
Invalid use of group function


Takiego jeszcze nie widziałem. smile.gif

Już nie będe kolorował chciałem żeby było ładnie i widocznie,


edit:
Sprawidzłem pod sql Navigatorem, i nie wyświetla mi błędu groupa, questionmark.gif
A zapytanie to działa pod Oraclem.

edit mark2:
Nawet nie zauważyłem jak mi pierwsza setka przeszła ech, a miałem kolegów na piwo zaprosić z tej okazji tongue.gif
nospor
teraz powinno byc juz ok:
  1.  SELECT count(pesel) ilosc ..... ORDER BY ilosc
Wykrywacz
Jest ok mam pytanie do wyświetlenia uzyć
  1. <?php
  2. print_r($patrz_id);
  3. ?>

wywala
Kod
Resource id #4

Jak zrobie
  1. <?php
  2.  
  3. while ($row = mysql_fetch_array($patrz_id)) {
  4. echo $row[];  
  5. }
  6. ?>


To mnie wali pustym ekranem...
Ja wiem że to pisze w maunalu, ale patrzałem no i coś takiego mi wychodzi. sadsmiley02.gif

EDIT:
  1. <?php
  2.  
  3. Zrobiłem tak echo '<table border="1">';
  4. while ($row = mysql_fetch_array($patrz_id)){
  5. echo '<tr>';
  6. echo '<td>'.$row["ilosc"].'</td>', '<td>'.$row["SUM(DATEDIFF(IFNULL(data_rozw, '$data'),data_od)) + count(pesel)"].'</td>','<td>'.$row["pesel"].'</td>';
  7.  
  8. echo '</tr>';
  9. }
  10. echo '</table>';
  11. ?>


Wyświetla
Kod
5  
Resource id #4
czyli count(pesel) i Resource id #4 czyli pesel.

Zrobiłem jeszcze tak
  1. <?php
  2.  $patrz_id = mysql_query("select count(pesel) ilosc,pesel,SUM(DATEDIFF(IFNULL(data_rozw, '$data'),data_od)) + count(pesel) ildat from daty group by pesel order by ilosc")
  3.  }
  4. }
  5.  
  6. echo '<table border="1">';
  7. while ($row = mysql_fetch_array($patrz_id)){
  8. echo '<tr>';
  9. echo '<td>'.$row["ilosc"].'</td>'
  10. //, '<td>'.$row["ildat"].'</td>'
  11. ,'<td>'.$row["pesel"].'</td>';
  12.  
  13. echo '</tr>';
  14. }
  15. echo '</table>';
  16. ?>


ale to też nie pomaga.
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.