Pereiti prie turinio

Rekomenduojami pranešimai

Iškilo šioks toks neaiškumas... Kaip reikėtų "palyginti" datas? Tarkim aš noriu, kad myslq atrinktų tik tas datas, kurios yra nelygios 0 ir yra neankstesnės nei šiandiena... Deja, antroji dalis neišeina.

Žodžiu, iš kodo labiau, gal, suprasit. :)

 

$data = date("Y.m.d H:m:s");
$total = mysql_num_rows(mysql_query("(SELECT * FROM daters WHERE date != '0000.00.00 00:00:00') UNION (SELECT * FROM daters WHERE date > '$data')"));

 

Dėkui. :)

Redagavo IG8
Nuoroda į pranešimą
Dalintis kituose puslapiuose

$sql = mysql_query("SELECT * FROM daters WHERE date < '".time()."'");
$total = mysql_num_rows($sql);

 

O jei laikas duombazėje formate "Y.m.d H:i:s", tuomet neišeis normaliai palyginti?

 

Pagal tą variantą: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource

 

Ar yra koks būdas palyginti datas, jei jos nėra (bent jau pačioje DB) timestamp formatu?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na bandžiau dabar tokiu būdu:

 

$data = strtotime("now");
$total = mysql_num_rows(mysql_query("(SELECT * FROM daters WHERE date != '0001.01.01 01:01:01') UNION (SELECT * FROM daters WHERE". strtotime('" date "') ." > '$data')"));

 

Bet duoda error'ą: Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource ...

 

Gal kažkas dar kokių minčių turi? :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Iškilo šioks toks neaiškumas... Kaip reikėtų "palyginti" datas? Tarkim aš noriu, kad myslq atrinktų tik tas datas, kurios yra nelygios 0 ir yra neankstesnės nei šiandiena... Deja, antroji dalis neišeina.

Žodžiu, iš kodo labiau, gal, suprasit. :)

 

$data = date("Y.m.d H:m:s");
$total = mysql_num_rows(mysql_query("(SELECT * FROM daters WHERE date != '0000.00.00 00:00:00') UNION (SELECT * FROM daters WHERE date > '$data')"));

 

Dėkui. :)

Gal veiks. Nebandžiau. Ir šiaip saugok unixtimestamp'ą arba tokiu formatu: YYYY-MM-DD H:i:s. Ir nekils jokių bėdų. Ir galėsi savo datą pasiversti kokiu tik nori formatu..

 

 
$date = date ( 'Y.m.d' );			

$total = mysql_num_rows ( mysql_query ( "SELECT * FROM daters WHERE DATEDIFF(date,'". $date ."') >0" ) );

arba

$date = date ( 'Y.m.d' ); 

$total = mysql_num_rows ( mysql_query ( "SELECT * FROM daters WHERE SELECT LEFT(date,10)>". $date ) );

Redagavo MuniGod
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Gal veiks. Nebandžiau. Ir šiaip saugok unixtimestamp'ą arba tokiu formatu: YYYY-MM-DD H:i:s. Ir nekils jokių bėdų. Ir galėsi savo datą pasiversti kokiu tik nori formatu..

 

 
$date = date ( 'Y.m.d' );			

$total = mysql_num_rows ( mysql_query ( "SELECT * FROM daters WHERE DATEDIFF(date,'". $date ."') >0" ) );

arba

$date = date ( 'Y.m.d' ); 

$total = mysql_num_rows ( mysql_query ( "SELECT * FROM daters WHERE SELECT LEFT(date,10)>". $date ) );

 

 

Dėkui už pagalbą, bet abu variantai supplied argument is not a valid MySQL result resource ir t.t.

 

Dėl suskaičiavimo kaip ir pats susitvarkiau:

 

$data = date("Y-m-d H:i:s");
$data1 = str_replace(" ", "", $data);
$data1 = str_replace("-", "", $data);
$data1 = str_replace(":", "", $data);
$timesimboliai = array(" ", ".", ":");
$time3 = str_replace('$timesimboliai', '', date);
$total = mysql_num_rows(mysql_query("(SELECT * FROM daters WHERE date != '0001.01.01 01:01:01') UNION (SELECT * FROM daters WHERE $time3 > '$data1')"));

 

Tik dabar problema atvaizduojant pagal tą patį pricipą:

 

$mdata = mysql_fetch_array(mysql_query("(SELECT * FROM daters WHERE date != '0001.01.01 01:01:01') UNION (SELECT * FROM daters WHERE $time3 > '$data1')"));
$kada = str_replace(".", "-", $mdata['date']);
$kada = str_replace(" ", "<br />", $mdata['date']);

<...>
echo "<td style='color:#0B610B;border-top:1px solid #A4A4A4;'>" . $kada . "</td>";

 

Kaip ir viską atvaizduoja, bet kažkodėl atvaizduoja ant visų įrašų, tokią datą, kurio pirmesnis id, o ne tą, kuri unikaliai prirašyta prie id...

Redagavo IG8
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Dėkui už pagalbą, bet abu variantai supplied argument is not a valid MySQL result resource ir t.t.

 

Dėl suskaičiavimo kaip ir pats susitvarkiau:

 

$data = date("Y-m-d H:i:s");
$data1 = str_replace(" ", "", $data);
$data1 = str_replace("-", "", $data);
$data1 = str_replace(":", "", $data);
$timesimboliai = array(" ", ".", ":");
$time3 = str_replace('$timesimboliai', '', date);
$total = mysql_num_rows(mysql_query("(SELECT * FROM daters WHERE date != '0001.01.01 01:01:01') UNION (SELECT * FROM daters WHERE $time3 > '$data1')"));

 

Tik dabar problema atvaizduojant pagal tą patį pricipą:

 

$mdata = mysql_fetch_array(mysql_query("(SELECT * FROM daters WHERE date != '0001.01.01 01:01:01') UNION (SELECT * FROM daters WHERE $time3 > '$data1')"));
$kada = str_replace(".", "-", $mdata['date']);
$kada = str_replace(" ", "<br />", $mdata['date']);

<...>
echo "<td style='color:#0B610B;border-top:1px solid #A4A4A4;'>" . $kada . "</td>";

 

Kaip ir viską atvaizduoja, bet kažkodėl atvaizduoja ant visų įrašų, tokią datą, kurio pirmesnis id, o ne tą, kuri unikaliai prirašyta prie id...

Nesąmonę tu čia parašei. Tuoj pabandysiu parašyti kodą, kad veiktų.

 

 

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na, bet veikia. Bent jau suskaičiuoja teisingai, tik su atvaizdavimu kyla nesklandumų... :P

 

// Sukuriam lentelę

CREATE TABLE IF NOT EXISTS `testing` (
 `id` int(8) unsigned NOT NULL auto_increment,
 `date` varchar(100) collate utf8_unicode_ci NOT NULL,
 PRIMARY KEY  (`id`),
 KEY `date` (`date`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

// įrašom į lentelę bet kokias datas

INSERT INTO `testing` (`id`, `date`) VALUES
(1, '2010.12.11 00:53:12'),
(2, '2010.12.12 01:53:12'),
(3, '2010.12.15 00:53:12'),
(4, '2011.01.16 13:53:12'),
(5, '2010.11.11 00:53:12'),
(6, '2010.12.10 00:53:12'),
(7, '2010.12.16 00:53:12'),
(8, '2010.12.16 09:53:12'),
(9, '2010.12.09 00:53:12'),
(10, '2010.12.04 00:53:12'),
(11, '0');

// paimam šiandienos datą

$date = date ( 'Y.m.d' );

// SQL užklausa: "SELECT * FROM testing WHERE DATEDIFF(date,'". $date ."') >0"
// Arba: "SELECT * FROM testing WHERE LEFT(date,10)>'". $date ."'" 
// Pas mane atrodo taip:

$res = $db -> get_all ( "SELECT * FROM testing WHERE DATEDIFF(date,'". $date ."') >0" );

// Arba $res = $db -> get_all ( "SELECT * FROM testing WHERE LEFT(date,10)>'". $date ."'" ); rezultas vistiek bus tas pats

// Atvaizduojam ką gaunam

echo '<pre>';
print_r($res);
echo '</pre>';

/* ir gaunam tokį masyvą, gražina visus įrašus, kurių data yra didesnė už šiandienos, tame tarpe ir šiandien diena.

Array
(
   [0] => Array
       (
           [id] => 1
           [date] => 2010.12.11 00:53:12
       )

   [1] => Array
       (
           [id] => 2
           [date] => 2010.12.12 01:53:12
       )

   [2] => Array
       (
           [id] => 3
           [date] => 2010.12.15 00:53:12
       )

   [3] => Array
       (
           [id] => 4
           [date] => 2011.01.16 13:53:12
       )

   [4] => Array
       (
           [id] => 7
           [date] => 2010.12.16 00:53:12
       )

   [5] => Array
       (
           [id] => 8
           [date] => 2010.12.16 09:53:12
       )

)
*/

Viskas veikia, o kad tau neveikia tai neįsivaizduoju ką tu ten darai. :)

Ir šiaip ten kur aukčiau rašei.

$data = date("Y-m-d H:i:s");
$data1 = str_replace(" ", "", $data);
$data1 = str_replace("-", "", $data);
$data1 = str_replace(":", "", $data);
$timesimboliai = array(" ", ".", ":");
$time3 = str_replace('$timesimboliai', '', date);

Nu čia konkrečiai prisirašei. :D kam tiek tų str_replace?

// vietoj šio

$data = date("Y-m-d H:i:s");
$data1 = str_replace(" ", "", $data);
$data1 = str_replace("-", "", $data);
$data1 = str_replace(":", "", $data);

// naudoji

$data = date ( 'YmdHis' );

// čia tai išvis nesuprantu ką tu darai

$timesimboliai = array(" ", ".", ":"); // ok, čia masyvas
$time3 = str_replace('$timesimboliai', '', date); // o kas čia? paėmei masyvą į apostrofus, tau skaito kaip paprastą kintamąjį, atsimink kintamieji neimami į jokias kabutes. Toliau, kas tas date? Tau skaito kaip konstantą, turėtų mesti notice warning'ą, jei tu taip galvoji, kad paimsi SQL lauką - klysti. 

Redagavo MuniGod
Nuoroda į pranešimą
Dalintis kituose puslapiuose

// Sukuriam lentelę

CREATE TABLE IF NOT EXISTS `testing` (
 `id` int(8) unsigned NOT NULL auto_increment,
 `date` varchar(100) collate utf8_unicode_ci NOT NULL,
 PRIMARY KEY  (`id`),
 KEY `date` (`date`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1 ;

// įrašom į lentelę bet kokias datas

INSERT INTO `testing` (`id`, `date`) VALUES
(1, '2010.12.11 00:53:12'),
(2, '2010.12.12 01:53:12'),
(3, '2010.12.15 00:53:12'),
(4, '2011.01.16 13:53:12'),
(5, '2010.11.11 00:53:12'),
(6, '2010.12.10 00:53:12'),
(7, '2010.12.16 00:53:12'),
(8, '2010.12.16 09:53:12'),
(9, '2010.12.09 00:53:12'),
(10, '2010.12.04 00:53:12'),
(11, '0');

// paimam šiandienos datą

$date = date ( 'Y.m.d' );

// SQL užklausa: "SELECT * FROM testing WHERE DATEDIFF(date,'". $date ."') >0"
// Arba: "SELECT * FROM testing WHERE LEFT(date,10)>'". $date ."'" 
// Pas mane atrodo taip:

$res = $db -> get_all ( "SELECT * FROM testing WHERE DATEDIFF(date,'". $date ."') >0" );

// Arba $res = $db -> get_all ( "SELECT * FROM testing WHERE LEFT(date,10)>'". $date ."'" ); rezultas vistiek bus tas pats

// Atvaizduojam ką gaunam

echo '<pre>';
print_r($res);
echo '</pre>';

/* ir gaunam tokį masyvą, gražina visus įrašus, kurių data yra didesnė už šiandienos, tame tarpe ir šiandien diena.

Array
(
   [0] => Array
       (
           [id] => 1
           [date] => 2010.12.11 00:53:12
       )

   [1] => Array
       (
           [id] => 2
           [date] => 2010.12.12 01:53:12
       )

   [2] => Array
       (
           [id] => 3
           [date] => 2010.12.15 00:53:12
       )

   [3] => Array
       (
           [id] => 4
           [date] => 2011.01.16 13:53:12
       )

   [4] => Array
       (
           [id] => 7
           [date] => 2010.12.16 00:53:12
       )

   [5] => Array
       (
           [id] => 8
           [date] => 2010.12.16 09:53:12
       )

)
*/

Viskas veikia, o kad tau neveikia tai neįsivaizduoju ką tu ten darai. :)

Ir šiaip ten kur aukčiau rašei.

$data = date("Y-m-d H:i:s");
$data1 = str_replace(" ", "", $data);
$data1 = str_replace("-", "", $data);
$data1 = str_replace(":", "", $data);
$timesimboliai = array(" ", ".", ":");
$time3 = str_replace('$timesimboliai', '', date);

Nu čia konkrečiai prisirašei. :D kam tiek tų str_replace?

// vietoj šio

$data = date("Y-m-d H:i:s");
$data1 = str_replace(" ", "", $data);
$data1 = str_replace("-", "", $data);
$data1 = str_replace(":", "", $data);

// naudoji

$data = date ( 'YmdHis' );

// čia tai išvis nesuprantu ką tu darai

$timesimboliai = array(" ", ".", ":"); // ok, čia masyvas
$time3 = str_replace('$timesimboliai', '', date); // o kas čia? paėmei masyvą į apostrofus, tau skaito kaip paprastą kintamąjį, atsimink kintamieji neimami į jokias kabutes. Toliau, kas tas date? Tau skaito kaip konstantą, turėtų mesti notice warning'ą, jei tu taip galvoji, kad paimsi SQL lauką - klysti. 

 

 

Na, pabandžiau šiuo būdu, bet kitokį error'ą išmeta, kai parašau:

 

$data = date("Y.m.d H:i:s");
$res = $db -> get_all ( "SELECT * FROM daters WHERE DATEDIFF(date,'". $data ."') > 0" );

$total = mysql_num_rows($res);

 

Esmė, jog man reikia, kad mysql suskaičiuotų tik tuos įrašus, kurių data yra didesnė už šiandienos... :P

 

Labai dėkui už pagalbą. :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nu kam tas valandas ir minutes kiši kur jų nereikia? Matau, beveik nesigaudau.

 


$total = mysql_num_rows ( mysql_query ( "SELECT * FROM daters WHERE DATEDIFF(date,'". date ( Y.m.d ) ."') >0"  ) ) or die ( mysql_error () );

 

Ir jei mate klaidą, sakyk kokią.

 

 

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Nu kam tas valandas ir minutes kiši kur jų nereikia? Matau, beveik nesigaudau.

 


$total = mysql_num_rows ( mysql_query ( "SELECT * FROM daters WHERE DATEDIFF(date,'". date ( Y.m.d ) ."') >0"  ) ) or die ( mysql_error () );

 

Ir jei mate klaidą, sakyk kokią.

 

 

Na, klaidos dabar nemeta, bet ne taip atvaizduoja ir skaičiuoja kaip turėtų.

Duombazėje yra 5 įrašai, 3 iš jų su datom, o 2-i iš jų su didesnės nei šiandienos, t.y.: 2111.02.54 ir 2958.12.30.

Bet suskaičiuoja tik 1-ą. O atvaizduoja visas 3-is.. ;D

 

Atvaizduoju:

 

$mdata = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE DATEDIFF(bandate,'". date ( Y.m.d ) ."') >0"));
$kada = str_replace(".", "-", $mdata['bandate']);
$kada = str_replace(" ", "<br />", $mdata['bandate']);
<...>
echo "<td style='color:#0B610B;border-top:1px solid #A4A4A4;'>" . $kada . "</td>";

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na, klaidos dabar nemeta, bet ne taip atvaizduoja ir skaičiuoja kaip turėtų.

Duombazėje yra 5 įrašai, 3 iš jų su datom, o 2-i iš jų su didesnės nei šiandienos, t.y.: 2111.02.54 ir 2958.12.30.

Bet suskaičiuoja tik 1-ą. O atvaizduoja visas 3-is.. ;D

 

Atvaizduoju:

 

$mdata = mysql_fetch_array(mysql_query("SELECT * FROM users WHERE DATEDIFF(bandate,'". date ( Y.m.d ) ."') >0"));
$kada = str_replace(".", "-", $mdata['bandate']);
$kada = str_replace(" ", "<br />", $mdata['bandate']);
<...>
echo "<td style='color:#0B610B;border-top:1px solid #A4A4A4;'>" . $kada . "</td>";

 

Čia visas kodas? O tu bent ciklą suki?

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Čia visas kodas? O tu bent ciklą suki?

 

Žinoma.

 

Tiesa, dabar jau padariau, kad vaizduotų taip, kiek ir suskaičiuoja. Tai dabar suskaičiuoja 1-ą ir atvaizduoja 1-ą, nors turėtų būt 2-u..

 

EDIT: Jau pats susitvarkiau viską.

Labai DIDELIS DĖKUI MuniGod už pagalbą! :)

Redagavo IG8
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tu greiciau visa db struktura pakeisi ir sql uzklausas sutvarkysi negu cia sita problema ispresi, cia tas pats kas uzkalus varikiui ji degtukais ramstyt, eik prie problemos tiesiai o ne per aplinkui, niekas taip neprogramuoja kaip,kad tu todel nemanau, kad tau cia kazkas pades.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Tu greiciau visa db struktura pakeisi ir sql uzklausas sutvarkysi negu cia sita problema ispresi, cia tas pats kas uzkalus varikiui ji degtukais ramstyt, eik prie problemos tiesiai o ne per aplinkui, niekas taip neprogramuoja kaip,kad tu todel nemanau, kad tau cia kazkas pades.

 

Jau susitvarkiau. :)

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Žinoma.

 

Tiesa, dabar jau padariau, kad vaizduotų taip, kiek ir suskaičiuoja. Tai dabar suskaičiuoja 1-ą ir atvaizduoja 1-ą, nors turėtų būt 2-u..

 

EDIT: Jau pats susitvarkiau viską.

Labai DIDELIS DĖKUI MuniGod už pagalbą! :)

Nėra už ką. Na ir kaip atrodo galutinis kodas? Ką netaip darei?

 

Tu greiciau visa db struktura pakeisi ir sql uzklausas sutvarkysi negu cia sita problema ispresi, cia tas pats kas uzkalus varikiui ji degtukais ramstyt, eik prie problemos tiesiai o ne per aplinkui, niekas taip neprogramuoja kaip,kad tu todel nemanau, kad tau cia kazkas pades.

 

Na čia lengviausias, greičiausias ir geriausias būdas būtų buvę pasikeisti į unix timestamp'ą, aš taip pat už tai, kad būtų geriau pasikeitęs. Bet susidūręs žmogus su tokia problema išmoksta kažko nauja (DATEDIFF ir LEFT, kurių nemokėjo), ir jei kada kažko panašaus reikės, jau žinos kaip tai išspręsti. Juk nepamaišys, žinojimas kaip tą ar aną padaryti skirtingais būdais.

 

 

 

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...