| Autor | Zpráva | ||
|---|---|---|---|
| Prkny Profil |
#1 · Zasláno: 3. 11. 2007, 09:20:30
Zdravím, lámu si hlavu nad dotazem z mysql databáze následujícího znění, poraďte:
vyber vše z tabulky jménem ABC 30 posledních záznamů a z těchto záznamů jich 9 náhodně zobraz Jedná se o poddotaz mysql ale neumím jej použít v tomto případe, prosím o pomoc. Děkuji. |
||
| Prkny Profil |
#2 · Zasláno: 3. 11. 2007, 09:21:03
Zdravím, lámu si hlavu nad dotazem z mysql databáze následujícího znění, poraďte:
vyber vše z tabulky jménem ABC 30 posledních záznamů a z těchto záznamů jich 9 náhodně zobraz Jedná se o poddotaz mysql ale neumím jej použít v tomto případe, prosím o pomoc. Děkuji. |
||
| Kajman_ Profil * |
#3 · Zasláno: 3. 11. 2007, 14:50:46
select * from
(select * from abc order by id desc limit 30) t order by rand() limit 9 |
||
| Prkny Profil |
#4 · Zasláno: 3. 11. 2007, 19:29:00
co znamená to "t" ve druhem radku na konci ?
|
||
| nightfish Profil |
#5 · Zasláno: 3. 11. 2007, 19:42:49
co znamená to "t" ve druhem radku na konci ?
to je alias (zkratka) pro tabulku vzniklou dotazem select * from abc order by id desc limit 30 |
||
| Prkny Profil |
#6 · Zasláno: 5. 11. 2007, 12:17:45
Bohužel mi to nejede hodí to následující hlášku :
SELECT * FROM (SELECT * FROM zbozi ORDER BY id DESC LIMIT 30) t ORDER BY RAND() LIMIT 9 MySQL hlásí: Dokumentace #1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select * from zbozi order by id desc limit 30) t order by RAND Verze MySQL klienta: 5.0.18 Verze MySQL: 4.0.27 |
||
| djlj Profil |
#7 · Zasláno: 5. 11. 2007, 12:19:48
MySQL starší než 4.1 neumí vnořené dotazy a patří do musea.
|
||
| Joker Profil |
#8 · Zasláno: 5. 11. 2007, 12:20:08
Verze MySQL: 4.0.27
MySQL umí poddotazy až od verze 4.1. Takže buď upgradovat databázi, nebo těch devět náhodných bude potřeba řešit až skriptem. |
||
| Prkny Profil |
#9 · Zasláno: 5. 11. 2007, 12:27:35
mohli by jste mi dat inspiraci jak v php udelat tech 9 nahodnych selectů ?
|
||
| Kajman_ Profil * |
#10 · Zasláno: 5. 11. 2007, 12:30:24
Všechny si dát do pole a pak
http://cz.php.net/manual/cs/function.array-rand.php |
||
| Prkny Profil |
#11 · Zasláno: 5. 11. 2007, 13:55:58
kde je chyba ?
$dotaz = mysql_query("SELECT * FROM zbozi WHERE vyradit='' ORDER BY RAND() LIMIT 30"); srand ((double) microtime() * 10000000); $rand_keys = array_rand($dotaz, 6); while($radek=MySQL_Fetch_Array($rand_keys)){ echo "radek[id], radek[zbozi]"; } |
||
| Mastodont Profil |
#12 · Zasláno: 5. 11. 2007, 14:00:48
vyradit=???
|
||
| Joker Profil |
#13 · Zasláno: 5. 11. 2007, 14:06:25
kde je chyba ?
Co to napíše? |
||
| Prkny Profil |
#14 · Zasláno: 5. 11. 2007, 14:16:40
píše to chybu:
Warning: array_rand() [function.array-rand]: First argument has to be an array in /home/webhosting/sportovniobchod.cz/html/www/test.php on line 17 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/webhosting/sportovniobchod.cz/html/www/test.php on line 21 radek 17 je $rand_keys = array_rand($dotaz, 6); radek 21 je while($radek=MySQL_Fetch_Array($rand_keys)){ mastodont: vyradit je filtr.... kdyz je prazdny zobraz.... |
||
| nightfish Profil |
#15 · Zasláno: 5. 11. 2007, 14:18:04 · Upravil/a: nightfish
echo "radek[id], radek[zbozi]";
možná spíš echo $radek['id'].", ".$radek['zbozi']; EDIT: no jinak do array_rand() musí jako první parametr přijít pole, ne odkaz na výsledek z mySQL pakliže chceš vypsat výsledky náhodně seřazené, tak bude lepší array_srand() vynechat a do dotazu doplnit ORDER BY RAND() EDIT2: jak vidím, tak ORDER BY RAND() tam máš... takže k čemu tam je to array_rand()? |
||
| Prkny Profil |
#16 · Zasláno: 5. 11. 2007, 15:03:15
pravda dotaz by mel vypadat takto bez random... tedy vyber poslednich 30 zaznamu
$dotaz = mysql_query("SELECT * FROM zbozi WHERE vyradit='' ORDER BY id DESC LIMIT 30"); pak bych chtel docilit výběr 6 nahodných položek z onich 30 poslednich zaznamu. mam tedy databázový dotaz uložit do pole ? asi takto ? $pole = MySQL_Fetch_Array($dotaz); pak výběr náhodných šesti záznamů $rand_keys = array_rand($pole, 6); pak to zobratit pres while ? while($radek=MySQL_Fetch_Array($rand_keys)){ echo "radek['id'], radek['zbozi']"; } Ale nějak mi to nefunguje kde je chyba ? nehází to žádnou hlášku vypíše to smyčku jednoho záznamu stále do kola |
||
| Joker Profil |
#17 · Zasláno: 5. 11. 2007, 15:04:51
Prkny
Už to vidím... $rand_keys = array_rand($dotaz, 6); - jak píše nightfish, té funkci se tady místo pole předává resource- výsledek SQL dotazu. A naopak tady: while($radek=MySQL_Fetch_Array($rand_keys)){ - funkce mysql_fetch_array() očekává resource. Správný postup při použití array_rand by byl zhruba takovýhle- schematicky: 1. Vyberu těch 30 prvků. 2. Jednotlivé položky si uložím do pole, např.: $pole=array(); while($i = mysql_fetch_array($vysledek_dotazu){array_push($pole,$i)} (vznikne mi tedy pole polí) 3. Udělám $vybrane = array_rand($pole,9); 4. foreach($vybrane as $v) vypíšu $pole[$vybrane[$v]] |
||
| Kajman_ Profil * |
#18 · Zasláno: 5. 11. 2007, 21:20:04
Nebo když Vám dělá programování problémy, tak zkuste dva dotazy...
mysql_query("set hranice@=SELECT id FROM zbozi WHERE vyradit='' ORDER BY id DESC LIMIT 30, 1"); $dotaz = mysql_query("SELECT * FROM zbozi WHERE vyradit='' and id>ifnull(hranice,0) order by rand() limit 9"); |
||
| Prkny Profil |
#19 · Zasláno: 6. 11. 2007, 08:44:27
na ty dva dotazy mi to hodí tuto chybu
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/webhosting/sportovniobchod.cz/html/www/test.php on line 20 tedy u cyklu pro výpis pole: while($radek=MySQL_Fetch_Array($dotaz)){ |
||
| Kajman_ Profil * |
Jo, to se občas přihodí překlepy, když se to jen píše s hlavy, třeba to už bude lepší.
A když ne, tak vypište mysql_error. mysql_query("SELECT @hranice:=id FROM zbozi WHERE vyradit='' ORDER BY id DESC LIMIT 30, 1"); $dotaz = mysql_query("SELECT * FROM zbozi WHERE vyradit='' and id>ifnull(@hranice,0) order by rand() limit 9"); |
||
| Prkny Profil |
#21 · Zasláno: 6. 11. 2007, 09:33:16
Pánové je to výborný, naprosto přesně to funguje jak jsem potřeboval.
Všem velice děkuji za diskusi, dozvěděl jsem se spousty nových informací. Hlavní dík patří Kajmanovi_ |
||
|
Časová prodleva: 19 let
|
|||
Toto téma je uzamčeno. Odpověď nelze zaslat.
0