Autor | Zpráva | ||
---|---|---|---|
peta Profil |
#1 · Zasláno: 15. 1. 2007, 09:09:54
Mam tabulku s reklamnimi banery
a chci z ni zobrazit treba 5 baneru tak, aby se neopakovali a poradi typu bych si mohl volit. (type odpovida vlastne rozmerum a je spise pro dalsi ucely) id, type, x, y, data 1, 1, 320,200, "..." 2, 2, 160,200, "..." 3, 1, 320,200, "..." 4, 1, 320,200, "..." 5, 3, 80,60, "..." 6, 1, 320,200, "..." dotaz by mel byt nejak jako vyber nahodne id, kde type=2,3,1,1,1 a id!= jiz vybranemu id Jak takovy dotaz napsat? Pripadne nejakou literaturu, kde se podobne dotazy pouzivaji a nemusi se prohledavat cela stranka jako dokumentace mysql. |
||
Kajman_ Profil * |
#2 · Zasláno: 15. 1. 2007, 10:40:55
Náhodná data se občas řeší přes order by rand() ve spojení s limitem. Na velkých datech už to nemusí být použitelné.
|
||
peta Profil |
#3 · Zasláno: 15. 1. 2007, 11:04:22 · Upravil/a: peta
Kajman_
Ano, to vim, ze existuje neco jako RAND(). Ale, jak to spojit s tim, aby jsem mohl vybrat 5 konkretnich baneru s typ=neco a aby ID bylo jine nez jiz vybraneho. Co teda ja vim, tak obvykle random funkce vrati nahodne cislo, ktere se ale muze objevit znovu pri dalsim volani random. Cili predpokladam, kdyz dam RAND v dotazu, tak mi muze vybrat i retezec ID = 2,5,1,1,1 a to neni u zobrazovani reklamy zadouci mit 2 stejne. http://dev.mysql.com/doc/refman/5.0/en/mathematical-functions.html |
||
peta Profil |
#4 · Zasláno: 15. 1. 2007, 11:11:44
Takhle, ja o jednom reseni vim. Muzu zopakovat 5 dotazu a do kazdeho dat
id NOT IN (1) id NOT IN (1,3) id NOT IN (1,3,6) Ale jsem si rikal, ze bych to udelal elegantneji jednom dotazem. Tech reklam tam ma ten clovek asi 10. (nema smysl komentovat :) ) |
||
Kajman_ Profil * |
#5 · Zasláno: 15. 1. 2007, 11:23:18
pro 2,3,1,1,1 by to mohlo být tako nějak... nechápu, co v tom hledáte za složitosti
...where type=2 order by rand() limit 1) union all ...where type=3 order by rand() limit 1) union all ...where type=1 order by rand() limit 3) |
||
peta Profil |
#6 · Zasláno: 16. 1. 2007, 18:35:56
Kajman_ tak nevim, jestli by union fungoval.
mujhost.cz ma databazi jen 4.0.x a tam nejde ani SET NAMES Mam toto, ze opakuji ty dotazy, ale asi to mam nejak spatne //--- reklama --- $rekl_type = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18); $rekl_id = array(); $reklama = array(); for ($i=0;$i<count($rekl_type);$i++) { $reklama[$i]=""; $id = (count($rekl_id)>0) ? implode("','",$rekl_id) : ""; // $dotaz = "SELECT * FROM banners WHERE `type`='".$rekl_type[$i]."' AND `id` NOT IN ('$id') ORDER BY RAND() LIMIT 1"; //echo "<br/>$dotaz"; $dotaz = "SELECT * FROM banners WHERE `type`='".$rekl_type[$i]."' ORDER BY RAND() LIMIT 1"; $vysl = mysql_query($dotaz);// or die("<hr>Err: $dotaz<hr>".mysql_error()); $pocet = ($vysl>0) ? mysql_num_rows($vysl) : 0; if ($pocet>0) { $row = mysql_fetch_array($vysl); $rekl_id[$i] = $row['id']; $reklama[$i] = "<iframe class="r$i" src="banner.php?id=".$row['id']."" width="".$row['w']."" height="".$row['h']."" frameborder="0" scrolling="no">Reklama$i</iframe> "; } } |
||
peta Profil |
#7 · Zasláno: 17. 1. 2007, 07:42:16
tak to asi funguje, jen musim nastavit pro zobrazovani baneru cash=no. Se mi to asi neobnovilo :)
|
||
nightfish Profil |
#8 · Zasláno: 17. 1. 2007, 10:17:45
zobrazovani baneru cash=no
hotovost = ne? |
||
Časová prodleva: 17 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0