Autor Zpráva
Rellik
Profil
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("&","&amp;",$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
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("&","&amp;",$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... :)
Lamicz
Profil
Pouzivejte DATETIME a k tomu prislusne fce jako DAY(), MONTH() apod. Tohle je zbytecne slozity.

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