Autor | Zpráva | ||
---|---|---|---|
nyllo Profil |
#1 · Zasláno: 27. 8. 2013, 14:33:10
Dobrý den..
dělám si časový program. SQL <database name="d37609_prog"> <!-- Tabulka progplan --> <table name="progplan"> <column name="time">06:00:00</column> <column name="name">Rannà rozjezd</column> <column name="id">1</column> </table> <table name="progplan"> <column name="time">18:00:00</column> <column name="name">NoÄnà playlist</column> <column name="id">2</column> </table> <table name="progplan"> <column name="time">10:00:00</column> <column name="name">Dopolednà show</column> <column name="id">3</column> </table> <table name="progplan"> <column name="time">14:00:00</column> <column name="name">Odpolednà mix</column> <column name="id">4</column> </table> <table name="progplan"> <column name="time">00:00:00</column> <column name="name">After party</column> <column name="id">5</column> </table> </database> PHP <?php echo 'Právě na programu:'; include 'config.php'; mysql_connect($dbserver, $dblogin, $dbheslo); mysql_select_db($dbnazev); mysql_query("SET NAMES 'UTF-8'"); //******************* nastavení navigace a výběr dat z databáze ****************** $start = $_GET['start']; if(!$start) $start=0; $prispevku = "1"; // počet příspěvků které se vypíší na stránku $datum = Date("H:i:s", Time()); echo($datum); $query = "SELECT * FROM `progplan` where `time` <= '".$datum."' order by `time` asc limit ".$start.", ".$prispevku; $vypis = mysql_query($query); if (FALSE === $vypis) {//nastala chyba, vypis ju (na ostrom webe radsej zaloguj) echo mysql_errno() . ": " . mysql_error(); } //********************************* výpis článků ********************************* if (mysql_num_rows($vypis) === 0) { echo '<p>Na dnes nejsou žádné události.</p>'; } else { while($row = mysql_fetch_array($vypis)) { echo '<div class="prog">'.$row["time"].''.$row["name"].'</div>'; } }; mysql_close(); ?> PHP sic vypisuje a však buď první nebo poslední položku v SQL. |
||
juriad Profil |
Za předpokladu, že chceš zobrazit následujících události, tak je vhodnější chtít počítat celých 24 hodin, protože po 18. hodině neexistuje už žádná události. Navíc událost v 0 hodin by se zobrazila jen první sekundu po půlnoci.
$sql = "SELECT * FROM progplan ORDER BY time >= '".$datum."' DESC, time ASC LIMIT ".$start.", ".$prispevku; Druhá podmínka seřadí události správně podle času. MariaDB [pokus]> SELECT * FROM udalosti ORDER BY cas >= CURTIME() DESC, cas ASC; +----------+-------------+----+ | cas | name | id | +----------+-------------+----+ | 18:00:00 | vecere | 2 | | 00:00:00 | after party | 5 | | 06:00:00 | rozcvicka | 1 | | 10:00:00 | dopoledne | 3 | | 14:00:00 | odpoledne | 4 | +----------+-------------+----+ |
||
nyllo Profil |
#3 · Zasláno: 27. 8. 2013, 15:15:26
pokud jsem to pochopil dobře musím nadefinovat událost ještě v 23:59:59 a poté tu samou v 00:00:00 to pokryje celý den.
tento řádek $query = "SELECT * FROM `progplan` where `time` <= '".$datum."' order by `time` asc limit ".$start.", ".$prispevku; nahradím tímto $query = "SELECT * FROM progplan ORDER BY `time` >= '".$datum."' DESC, time ASC LIMIT ".$start.", ".$prispevku; SQL upravím takto <!-- - Databáze: 'd37609_prog' --> <database name="d37609_prog"> <!-- Tabulka progplan --> <table name="progplan"> <column name="time">00:00:00</column> <column name="name">After party</column> <column name="id">0</column> </table> <table name="progplan"> <column name="time">06:00:00</column> <column name="name">Rannà rozjezd</column> <column name="id">1</column> </table> <table name="progplan"> <column name="time">10:00:00</column> <column name="name">Dopolednà show</column> <column name="id">2</column> </table> <table name="progplan"> <column name="time">14:00:00</column> <column name="name">Odpolednà mix</column> <column name="id">3</column> </table> <table name="progplan"> <column name="time">18:00:00</column> <column name="name">NoÄnà playlist</column> <column name="id">4</column> </table> <table name="progplan"> <column name="time">23:59:59</column> <column name="name">After party</column> <column name="id">5</column> </table> </database> |
||
juriad Profil |
nyllo:
Nemusíš, speciální událost není třeba, stačí, když použiješ můj dotaz. Otestoval jsem jej a jak je vidět na výsledku, tak funguje. V podstatě jen seřadí všechny události podle času, přičemž přednost dává těm, které nastanou do konce dne. |
||
nyllo Profil |
#5 · Zasláno: 27. 8. 2013, 15:34:34
toto je celé php výsledek je Noční playlist - a měl by být Odpolední mix
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Web API</title> <!-- zečátek meta --> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <!-- konec meta --> <link rel="stylesheet" href="style.css" media="screen"> <!-- začátek skriptů --> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.0/jquery.min.js"></script> <!-- konec skriptů --> </head> <body> <!-- začátek tabulky --> <div class="panel"> <div class="singl"> <?php $xml = @simplexml_load_file("http://api.spaceradio.cz/new/new.php"); if($xml){ echo '<div class="panel">'; foreach ($xml->track as $value){ echo '<div class="player-image">'; print "<img src=".$value->cover." http://play.spaceradio.cz/img/spacer.png class=\"image\">"; echo '</div>'; echo '<div class="player-song" >'; print "<div class=\"artists\">".$value->artists."</div>"; print "<div class=\"title\">".$value->title."</div>"; echo '</div>'; } echo '</div>'; } else{ echo 'Error with the call_api.php!'; } ?> </div> <div class="panel2"> <!-- začátek programu --> <div class="program"> <?php echo 'Právě na programu:'; include 'config.php'; mysql_connect($dbserver, $dblogin, $dbheslo); mysql_select_db($dbnazev); mysql_query("SET NAMES 'UTF-8'"); //******************* nastavení navigace a výběr dat z databáze ****************** $start = $_GET['start']; if(!$start) $start=0; $prispevku = "1"; // počet příspěvků které se vypíší na stránku $datum = Date("H:i:s", Time()); $query = "SELECT * FROM progplan ORDER BY time >= '".$datum."' DESC, time ASC LIMIT ".$start.", ".$prispevku; $vypis = mysql_query($query); if (FALSE === $vypis) {//nastala chyba, vypis ju (na ostrom webe radsej zaloguj) echo mysql_errno() . ": " . mysql_error(); } //********************************* výpis článků ********************************* if (mysql_num_rows($vypis) === 0) { echo '<p>Na dnes nejsou žádné události.</p>'; } else { while($row = mysql_fetch_array($vypis)) { echo '<div class="prog">'.$row["name"].'</div>'; } }; mysql_close(); ?> <!-- konec programu --> </div> </div> </div> <!-- konec tabulky --> </body> </html> |
||
juriad Profil |
U mě ve střední Evropě je právě 15:40, tedy následující událost začíná až v 18:00.
Pokud chceš zobrazit napřed aktuálně probíhající událost (tedy například After party se bude zobrazovat až do 6:00), tak je třeba použít jiný SQL dotaz. |
||
nyllo Profil |
#7 · Zasláno: 27. 8. 2013, 15:41:40 · Upravil/a: nyllo
query vypisuje toto
SELECT * FROM progplan ORDER BY time >= '15:38:54' DESC, time ASC LIMIT 0, 1 nemělo by být ASC LIMIT 0, 100 dle plánu v SQL by to mělo ukazovat Odpolední mix který běží od 14:00:00 |
||
juriad Profil |
#8 · Zasláno: 27. 8. 2013, 15:49:14 · Upravil/a: juriad
nyllo:
Tím bys vynutil zobrazení prvních 100 událostí; jelikož jich 100 neexistuje, zobrazily by se všechny. Limit ovlivňuje jen počet nikdy ne pořadí. Myslím, že máme spíše problém s tím, že jsi zatím neposal dostatečně svůj program. Například, která událost se má zobrazit v 15:00? 1) Ta, která začala bezprestředně před 15:00, tedy v tvém příkladu je to událost v 14:00. Má význam předchozí či probíhající události. 2) Ta, která začne bezprostředně po 15:00, tedy v tvém případě je to událost v 18:00. Má význam následující události. Aha, tedy první předcházející akci. |
||
nyllo Profil |
#9 · Zasláno: 27. 8. 2013, 15:57:46
Abych to tedy dostatečně vysvětlil.
v SQL jsem definoval co a v kolik hodin začíná. +----------+-------------+----+ | cas | name | id | +----------+-------------+----+ | 00:00:00 | after party | 0 | | 06:00:00 | rozcvicka | 1 | | 10:00:00 | dopoledne | 2 | | 14:00:00 | odpoledne | 3 | | 18:00:00 | vecere | 4 | +----------+-------------+----+ Vždy když padne určitá hodina definovaná v SQL začne určitý pořad a php výstup má říci co je nyní na programu. Např:.... Je 16:00:00 a dle SQL právě běží odpoledne. až do 18:00:00 kdy začne vecer. |
||
juriad Profil |
Konečně se někam dostáváme.
SELECT * FROM progplan ORDER BY time >= (SELECT time FROM progplan ORDER BY time <= CURTIME() DESC, time DESC LIMIT 1) DESC, time ASC LIMIT 0, 1; Vnitřní select vypočítává čas předchozí události a vnější zobrazuje všechny události počínaje tím časem. Zvýrazněné části můžeš upravit. Funkce CURTIME vrací aktuální čas; není ho tedy třeba předávat z PHP. mm, navrhuji přesunout do kategorie databáze. |
||
nyllo Profil |
#11 · Zasláno: 27. 8. 2013, 16:18:52
jak to tam mám použít?? :O
|
||
juriad Profil |
#12 · Zasláno: 27. 8. 2013, 16:23:44
Úplně snadno :) Samozřejmě, že to můžeš smrsknout na jeden řádek, ale pak aby se v tom prase vyznalo.
$query = "SELECT * FROM progplan ORDER BY time >= (SELECT time FROM progplan ORDER BY time <= CURTIME() DESC, time DESC LIMIT 1) DESC, time ASC LIMIT $start, $prispevku"; |
||
Časová prodleva: 12 let
|
0