在SQL中链接和连接数据


link and join data in SQL

我正在使用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);