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