Autor Zpráva
T-fon
Profil
Ahoj, potřeboval bych poradit s podmínkou:
WHERE year(datum) = year(CURRENT_DATE - interval 1 week) 
AND 
week(datum) = week(CURRENT_DATE - interval 1 week)
Měla by vypisovat záznamy z českého minulého týdne (od pondělí do neděle našeho času). Zkoušel jsem použít na CUTTENT_DATE funkci CONVERT_TZ, neúspěšně...
nejdesemiprihlasit
Profil
Upřímně nevím jestli je dobrý nápad dávat příklady při mysql doporučuji vše definovat mimo.
Skus vypsat všechny výsledky a pak je filtrovat. Není to nejlepší řešení, ale pro začátek stačí.

Pro příkad můj script na podporu.
//definice
$addons_Contact_mails=@mysqli_query($spojeni,"SELECT * FROM `Mails` ORDER BY `time` DESC");
$assoc_mails = mysqli_fetch_assoc($addons_Contact_mails)
$etime = time() - $week;
$week = strtotime( /*jeden týden ve stringovém zápisu nevím jak to teď je! - asi*/ "1 week" )
//výpis
while ($row = $assoc_mails){
if ($row[time] >= $etime){
                echo ' 
                  <tr>
                   <td><a href="" class="btn btn-default btn-sm"><i class="fa fa-trash-o"></i></a></td>
                   <td class="mailbox-star"><a href="#"><i class="fa fa-star';
                   if ($row["star"] == 0){
                    echo '-o';
                   }
                    echo ' text-yellow"></i></a></td>
                    <td class="mailbox-name"><a href="read.php?id='.$row["id"].'&todo=read">'.$row["name"].'</a></td>
                    <td class="mailbox-subject">'.$rows.'...</td>
                    <td class="mailbox-attachment"><i class="fa fa-paperclip"></i></td>
                    <td class="mailbox-date">'.get_timeago(strtotime($row["time"])).'</td>
                  </tr>';
                  }
                }
 }                                        
Nevím teda jestli to není kravina ale něco podobného mi funguje
T-fon
Profil
Nejde mi o to vypsat záznamy max. týden starý od teď (to je jednoduchý), ale za minulý kalendářní týden.
juriad
Profil
T-fon:
Tak si to v PHP vypočti a pak dosaď od a do přímo do dotazu. Dotaz v Mysql bych nekomplikoval výpočty. Mimochodem, porování s WEEK nebude fungovat dobře na hranici rokku.

$start = new DateTime('last week Monday');
$end = new DateTime('this week Monday');

echo "datum >= '"
    . $start->format("Y-m-d H:i:s") 
    . "' AND datum < " 
    . $end-> format("Y-m-d H:i:s") 
    . "'";

Všimni si, že se nesnažím porovnávat s minulou nedělí, ale raději s tímto pondělím. Jinak bys buď musel mít datum jako DATE nebo ho porovnávat přetypovaný na DATE, což by zpomalovalo.

Aby toto fungovalo, musíš mít reativně novou verzi PHP: >= 5.6.23, nebo >=7.0.8. S nižší verzí může považovat za začátek týdne neděli, což v neděli bude dávat špatné výsledky (podle našich zvyklostí). Možná to závisí na Locale? Vic v dokumentaci php.net/manual/en/datetime.formats.relative.php

nejdesemiprihlasit:
To, že něčoho nejsi schopný neznamená, že je dobrý nápad radit stejně i ostatním.
T-fon
Profil
Díky moc. Mám na Locale nějakou 7.1. Otestuju zítra, mám tam data jen z tohoto týdne :).
Keeehi
Profil
juriad:
S nižší verzí může považovat za začátek týdne neděli
V nižších verzích určitě půjde od dnešního dne odečítat postupně po dnech a kontrolovat, zda je ten den pondělí. Tím se nalezne pondělí tohoto týdne. Pak už stačí odečíst sedm dní.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0