我正在使用smarty php模板和sql server
我有以下表格:
table 1 (anime_pages) : contains data
table 2 (anime_genres) : contains categories
table 3 (genres_pages) : contains relationship between data and category
我正在尝试显示3个随机类别,其中包含来自该类别的10个数据结果。
我现在有以下php代码:
$randomcsql = $db->query("SELECT * FROM anime_genres ORDER BY RAND() LIMIT 3");
while($ft5 = $db->fetch_array($randomcsql))
{
$randomcats[] = $ft5;
}
$smarty->assign('randomcats' , $randomcats);
$db->free_result($randomcsql);
$animecatssql = $db->query("SELECT * FROM anime_pages JOIN genres_pages ON anime_pages.id = genres_pages.genre_id WHERE genres_pages.genre_id = (".$ft5['id'].") LIMIT 10 ");
while($ft6 = $db->fetch_array($animecatssql))
{
$animecats[] = $ft6;
}
$smarty->assign('animecats' , $animecats);
$db->free_result($animecatssql);
问题是(".$ft5['id']."
)它没有给我任何结果,如果我用一个数字代替它…我将得到一个重复的结果(每个数据重复两次)
如何解决这个问题?
有更好的代码吗?
我正在尝试这样做:http://img37.imageshack.us/img37/5024/unled1qk.png
在你的代码中
$animecatssql = $db->query("SELECT * FROM anime_pages JOIN genres_pages ON anime_pages.id = (".$ft5['id'].") LIMIT 10 ");
您正在使用$ft5
变量,该变量不存在,因为它超出了获取数据的while条件。
,你还说你想要3个随机类别和10个数据集。所以基本上总共需要30个数据集(每个10个)。你应该在一个循环中使用这个查询,这个循环将为数组$randomcats
运行三次。你的这个数组也会有数组作为每三个键的值。所以你必须去到数组的值(它将再次成为一个数组),然后在那里的值,你可以得到你正在搜索的值。
希望我说清楚了。
我通过显示随机结果而不是三个
解决了这个问题$randomcsql = $db->query("SELECT * FROM anime_genres ORDER BY RAND() LIMIT 1");
while($ft5 = $db->fetch_array($randomcsql))
{
$randomcats[] = $ft5;
$animecatssql = $db->query("SELECT * FROM anime_pages JOIN genres_pages ON anime_pages.id = genres_pages.genre_id WHERE genres_pages.genre_id = (".$ft5['id'].") LIMIT 10 ");
while($ft6 = $db->fetch_array($animecatssql))
{
$animecats[] = $ft6;
}
}
$smarty->assign('randomcats' , $randomcats);
$db->free_result($randomcsql);
$smarty->assign('animecats' , $animecats);
$db->free_result($animecatssql);