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: 13 let
|
0