ugrás a tartalomhoz

naponta uj mysql_query

eaposztrof · 2007. Júl. 4. (Sze), 20.33
udv,
olyan scriptet szeretnek irni, amely naponta mas sort olvas ki egy mysql tablabol. a tablaban amiben meghatarozatlan szamu sor van, es valtozik. ugy is fogalmazhatnek, h "napi random", avagy "daily news".


igy inditottam, de ez csak 31 'content'-tel mukodik, nekem tobb kell:
<?php
include("config.php");
mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);

$actdate="2000-01-".date('d');
$result = mysql_query("SELECT content FROM dailynews WHERE ins_date = '$actdate'");
$row = mysql_fetch_assoc($result);

		echo $row[content];
?>
otletem sincs h hogyan induljak el.. kis :help: legyszes
kossze..
 
1

Date?

janoszen · 2007. Júl. 4. (Sze), 21.08
Üdv,

Mi lenne, ha mondjuk megfelelően paramétereznéd a date függvényt? Vagy elolvasnád a doksiját a változatosság kedvéért?

Egyáltalán érted amit leírtál vagy csak ész nélkül másoltál? Ha nem érted, akkor elmondom mit csinál: létrehoz egy adatbázis kapcsolatot majd a "2000-01-" szöveget összefűzi a nap értékkel. Neked mindössze annyit kellene tenni, hogy a beégetett dátum helyett megfelelően fölparaméterezed a date függvényt. Ezt pedig a már emlegetett doksi alapján teheted meg.

J
2

plusz...

Thoer · 2007. Júl. 4. (Sze), 21.27
...van véletlen(szerű) lekérdezés is a mysql-ben. Úgy néz ki, hogy 'SELECT .... ORDER BY rand()'. Elég bonyolult.
4

order by random helyett order by daily kellene

eaposztrof · 2007. Júl. 4. (Sze), 21.33
"ORDER BY rand()" helyett nekem egy 'ORDER BY daily()' kellene.
3

felreertettel.. nem a 'date'-t keresem

eaposztrof · 2007. Júl. 4. (Sze), 21.31
sejtettem h be fog zavarni..
nincs igazad.. todom mit csinaltam. azt, h a mysql tablaban talalhato 2001-01-01,2001-01-02,..,2001-01-31 datummal jelzett sorokat hivom az aktualis honaptol fuggetlenul. ehhez csak anyi a dolgom, h havi egyszer feltoltom az adatbazist uj adatokkal.

ez eddig rendben is van, csakhogy nincs kedvem figyelni h mikor toltottem es mikor nem adatbazist, ezert kulonbozo idokozonkent, kulonbozo mennyiseget akarok tolteni, tehat nem 31 sorom lesz a tablaban hanem tobb, vagy kevesebb. ez valtozo.
tehat mas logika szerint kell szedegessem a sorokat a tablabol, a lenyeg h mindennap ujat, tehat a kovetkezot. ehez pedig semmi koze a datumnak. csak en azt valasztottam, merthogy 2 legyet egy csapasra akartam megoldani problemakat..

remelem most ertheto.. es ha valami nem elobb kerdezz vissza kerlek.
5

szerintem

Thoer · 2007. Júl. 4. (Sze), 22.02
Csinálj 2 táblát. Az egyikbe nem kell dátum csak feltöltöd a kiválasztandó adatokkal, a másikban pedig tárolod az adott naphoz tartozóakat.

Amikor használni akarod az adott naphoz tartozó adatot akkor a második táblából lekéred. Ha nem találsz (, mert az az aznapi első lekérés) akkor lekérsz egy sort az első táblából és beírod a második táblába a megfelelő dátummal együtt.
Az hogy az első táblából véletlenszerűen kéred le a sorokat vagy valamilyen szabály szerint, az már részletkérdés.
6

kiválasztás dátuma

zila · 2007. Júl. 4. (Sze), 22.22
Leválogatod a napi rekordjait ahogy akarod, majd bejegyzed a rekord mellé a leválogatás dátumát, vagy csak egy flag-et állítasz, hogy ez már szerepelt (a dátum azért jobb, mert legalább meg tudod nézni, hogy mikor került megjelenítésre). Persze az alap leválogatásban a kitöltött megjelenési dátumú rekordokat nem veszed figyelembe. Így a tábládban akármennyi sor lehet, sőt archívum jelleggel benne maradhat mindig minden...
7

naponta uj mysql query majdnem kesz

eaposztrof · 2007. Júl. 5. (Cs), 14.44
koszi, segitsegetekkel otletet adtatok,
ime a vegkifejlett:
<?php
include("config.php");
mysql_connect($dbhost,$dbuser,$dbpass);
mysql_select_db($dbname);
 
mysql_query("
	CREATE TABLE IF NOT EXISTS `dailynews` (
	`id` int(11) NOT NULL auto_increment,
	`name` varchar(40) NOT NULL default '',
	`content` text NOT NULL default '',
	`image` varchar(40) NOT NULL default '',
	`ins_date` date NOT NULL default '0000-00-00',
	`status` enum('on','off') NOT NULL default 'on',
	`show_date` date NOT NULL default '0000-00-00',
	PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=1");
 
$tday_date=date('Y-m-d');
$ytday_date=date("Y-m-d", time()-86400);
 
// the beginning // 0000-00-00 rewrite
$result = mysql_query("SELECT show_date FROM dailynews LIMIT 0, 1");
$row = mysql_fetch_assoc($result);
 
if ($row['show_date']=='0000-00-00'){
mysql_query("UPDATE dailynews SET show_date='$ytday_date' LIMIT 1");
}
// /the beginning
 
$result = mysql_query("SELECT id FROM dailynews WHERE show_date='$ytday_date'");
$row = mysql_fetch_assoc($result);
$tday_id=$row[id]+1;
 
$result = mysql_query("SELECT id,name,content,image,ins_date FROM dailynews WHERE id=$tday_id");
$row = mysql_fetch_assoc($result);
 
mysql_query("UPDATE dailynews SET show_date='$tday_date' WHERE id='$tday_id'");
 
		echo " <center><h2>$row[name]</h2></center><p>";
		if($row['image']){
			echo "<img src=\"".$row['image']."\" align=right>";
		};
		echo $row['content'];
		echo "</p>";
?>

de meg van egy kis gond vele, a //the beginning-kent jelolt reszben, a tabla elso sora hasznalhatatlanna valik.
termeszetesen ez manualisan eszkozolheto, de ha mar csinalok valamit, szeretem ha szep. kivul-belul.
8

nem értem

zila · 2007. Júl. 5. (Cs), 17.23
Nem értem mit csinálsz :)

Kiválasztasz egy rekordot, majd ha ennek a rekordnak a show_date mezeje üres, akkor update-elsz egy rekordot. Mivel nincs where feltétel egyikben sem, így megjósolhatatan mi is történik. Nem törvényszerű, hogy ugyanazt updateled mint amelyiket lekérdezted...

Meg kicsit felesleges ennyi select, pont kétszer annyi mint kéne :)

1. Kiválasztasz egy rekordot valamilyen szempont szerint, akár így:

SELECT id,name,content,image,ins_date FROM dailynews WHERE show_date IS NULL ORDER BY rand() LIMIT 1;
2. Ezek után update-elsz és megjeleníted amit akarsz.

UPDATE dailynews SET show_date=NOW() WHERE id = előző_selectből_az_id ;
Ja, a tábladefinícióban szerintem felesleges a NOT NULL a show_date-hez...
9

Az elv

vbence · 2007. Júl. 5. (Cs), 18.57
1) PHP-ben random seednek beállítod az aktuális napot (srand függvény).
2) Lekérdezed a táblában lévő legnagyobb ID-t.
3) Generálsz egy véletlen számot PHP-ben 1 és (a lekérdezett) maximum között
4) kiveszed a rekordot ezzel az ID-vel a táblából

Ha nem lenne ilyen rekord (törölték, valami), akkor újra generálsz randomot (monduk egy while ciklusba teszed a 3. és 4. lépést).

A seed miatt a PHP minden futáskor ugyanazt a véletlen sorozatot fogja generálni, de csak holnapig, amikor új seddel fogsz dolgozni. Szerintem ne csak a dátum utolsó tagját használd (nap), mert így változatlan adatbázis esetén minden hónap valahanyadikán ugyanaz a dolog fog feljönni.