Autor Zpráva
nyllo
Profil
Zdravím.

Potřebuji vypisovat z databáze informace podle počátečního a konečného data.

Model vypadá nějak takto:
news_date_end` >= '".$actual_date."' => `news_date_add

Napadlo mě zkusit postavit požadavek takto
SELECT * FROM `news` where `news_date_end` >= '".$act_date."' => `news_date_add` ORDER BY `news`.`news_date_end` ASC
Bohužel ta podmínka tam bude muset být složitější.


Předem děkuji za každou radu.
pcmanik
Profil
nyllo:
WHERE news_date_end <= $act_date AND news_date_add >= $act_date
nyllo
Profil
pcmanik:
dosadil jsem toto a nyní nevypisuje nic

SELECT * FROM `news` WHERE news_date_end <= $act_date AND news_date_add >= $act_date ORDER BY `news`.`news_date_end` DESC
juriad
Profil
Ty nerovnosti jsou opačně.

Prostě podmínku musíš vyjádřit jako dvě nerovnosti. Uprostřed to roztrhnout.
A <= B <= C je jen matematická zkratka za A <= B AND B <=C
Operátory neostré nerovnosti mají rovnítko vždy na pravé straně; čteš je: menší/větší nebo rovnost.

Alternativně je možné:
$act_date BETWEEN news_date_add AND news_date_end
nyllo
Profil
Bohužel ani tato hodnota nepomohla

SELECT * FROM `news` WHERE $act_date BETWEEN news_date_add AND news_date_end ORDER BY `news_date_end` DESC
juriad
Profil
Vypisuje to nějakou chybu, nebo dotaz prostě vrátí nula záznamů? Existuje nějaký záznam, který podmínce vyhovuje? Zadáváš $act-date správně? Tedy jako řetězec ve formátu '2014-05-07 19:17:28' včetně hraničních apostrofů?
nyllo
Profil
kód mám takto

$start = $_GET['start'];
if(!$start)

    $act_date = Date("Y-m-d", Time());
    echo $act_date;
    $query = "SELECT * FROM `news` WHERE $act_date BETWEEN news_date_add AND news_date_end ORDER BY `news_date_end` DESC";


$vypis =  mysql_query($query);
if (FALSE === $vypis) {
    echo mysql_errno() . ": " . mysql_error();
}

echo '<div id="page_2" class="container marketing">
<div id="page_box">

<div class="row">
        <div class="col-md-12">
            <div id="slider">
                <ul>';

while($row = mysql_fetch_array($vypis))
{
    echo '<li>'.$row["news_text"].'</li>';

};

echo '      </ul>  
        </div>
        </div>
    </div>
    </div>
    </div>'
?>
juriad
Profil
nyllo:
A vypíše to (11. řádek) nějakou chybu? Tipuji, že ano.
Obal $act_date na 6. řádku do apostrofů:
$query = "SELECT * FROM news WHERE '$act_date' BETWEEN news_date_add AND news_date_end ORDER BY `news_date_end` DESC";

Mimochodem, ty zpětné apostrofy nejsou téměř nikdy nutné. Josu nutné, jem když název tabulky/sloupce je jedním z klíčových slov.
nyllo
Profil
to bylo ono děkuji za radu. Chybu to nepsalo.
juriad
Profil
Aha, 2014-05-07 to vyhodnotilo aritmaticky jako 2002, což je mnohem menší než 20140705191728.000000. Viz http://dev.mysql.com/doc/refman/4.1/en/date-and-time-type-conversion.html

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: