| Autor | Zpráva | ||
|---|---|---|---|
| Rellik Profil |
#1 · Zasláno: 24. 6. 2011, 10:06:48 · Upravil/a: Rellik
Zdravím. Potřeboval bych poradit. Mám tabulku do které ukládám různé akce s různým datem konání.
Struktura tabulky: `id` `nazev` // název akce `datum` // celý datum akce `mesic` // měsíc ve kterém je akce `popis` // popis akce PRIMARY KEY (`id`) Zkoušel sem to řadit podle měsíce ale to vypíše pouze akce v daném měsíci. Když sem to řadil podle celého datumu, tak na prvním místě byly buď už neaktální a proběhlé akce, nebo akce, které budou teprv třeba za půl roku. potřeboval bych aby se akce seřadily podle nejbližší akce (proto sem přidal ten mesic) a pak zbytek opět podle aktuálnosti (prošlé akce už být ve výpisu nemusí). Současný script, který vypíše data pouze podle aktuálního měsíce: <?php
echo "\n<table class='kalendar_vypis'>\n";
$od = $_GET['od'];
$mesic = date("m");
$prispevku = 4;
if($od == "")
{ $od = 0; }
$date = date('m');
$vypis = mysql_query("SELECT *, extract(day from datum) as 'den', extract(month from datum) as 'mesic', extract(year from datum) as 'rok' FROM kalendar WHERE mesic=".$mesic." ORDER by datum asc limit ".$od.",".$prispevku."");
$kalendarExist = mysql_num_rows($vypis);
if($kalendarExist)
{
while($row = mysql_fetch_array($vypis))
{
if(!$row["akce"]) { $class = ''; } else { $class = 'class="akce"'; }
$kalendar = '<tr>
<td '.$class.'>
{den}.{mesic}.{rok}<br />
<a href="#" onmouseover="document.getElementById(\'kalendar_{light}\').style.visibility=\'visible\'" onmouseout="document.getElementById(\'kalendar_{light}\').style.visibility=\'hidden\'">{nazev}</a>
<div id="kalendar_{light}">{popis}</div>
</td>
</tr>'."\n";
$kalendar = str_replace('{popis}', $row["popis"], $kalendar);
$kalendar = str_replace('{den}', $row["den"], $kalendar);
$kalendar = str_replace('{mesic}', $row["mesic"], $kalendar);
$kalendar = str_replace('{rok}', $row["rok"], $kalendar);
$kalendar = str_replace('{nazev}', $row["nazev"], $kalendar);
$light = $row["nazev"];
$light = str_replace(' ', '_', $light);
$kalendar = str_replace('{light}', $light, $kalendar);
$kalendar = str_replace('\n', '<br />', $kalendar);
echo $kalendar;
}
}
echo "</table>\n";
$page = $_GET['page'];
if($page == '')
{
$adresa = "?";
} else {
$adresa = $_SERVER["REQUEST_URI"]."&";
}
$adresa = str_replace("&","&",$adresa);
$pocet = mysql_result(mysql_query("SELECT COUNT(*) FROM kalendar"), 0);
$konec=$od+$prispevku;
if(($od-$prispevku)>=0)
{
echo '<a href="'.$adresa.'od=' . ($od-$prispevku) . '" class="left">Předchozí</a>';
$konec=$od+$prispevku;
}
if(($od+$prispevku)<$pocet)
{
echo '<a href="'.$adresa.'od=' . ($od+$prispevku) . '" class="right">Další</a>';
}
echo "<br /><br />";
?>Díky za rady... |
||
| Rellik Profil |
#2 · Zasláno: 24. 6. 2011, 12:23:54 · Upravil/a: Rellik
Tak ž sem to nejspíš vyřešil. Vypíše to pouze příspěvky, které se rovnají, nebo jsou větší (budoucí) než aktuální datum.
<?php
//....
$datum = date("y"."m"."d");
$prispevku = 4;
if($od == "")
{ $od = 0; }
$vypis = mysql_query("SELECT *, extract(day from datum) as 'den', extract(month from datum) as 'mesic', extract(year from datum) as 'rok' FROM kalendar WHERE `datum` >= ".$datum." ORDER by datum ASC limit ".$od.",".$prispevku."");
$kalendarExist = mysql_num_rows($vypis);
if($kalendarExist)
{
//pokračování scriptu nezměněno
}
$adresa = str_replace("&","&",$adresa);
$pocet = mysql_num_rows(mysql_query("SELECT * FROM kalendar WHERE `datum` >=".$datum."")); // pozměněno kvůli správnému stránkování
// zbytek scriptu neměněno
?>Vypadá že to funguje, uvidíme jak to bude když bude příspěvků víc.. Tak třeba to někomu pomůže se stejným problémem... :) |
||
|
Časová prodleva: 8 dní
|
|||
| Lamicz Profil |
#3 · Zasláno: 2. 7. 2011, 14:13:10
Pouzivejte DATETIME a k tomu prislusne fce jako DAY(), MONTH() apod. Tohle je zbytecne slozity.
|
||
|
Časová prodleva: 14 let
|
|||
0