Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL中的链接和联接数据_Php_Sql - Fatal编程技术网

Php SQL中的链接和联接数据

Php SQL中的链接和联接数据,php,sql,Php,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 =

我正在使用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']”)。“
)它没有给我任何结果,如果我用一个数字替换它。。。我将得到一个重复的结果(每个数据重复两次)

我怎样才能解决这个问题

有更好的代码可以使用吗


我正在尝试这样做:

在您的代码中

$animecatssql = $db->query("SELECT * FROM anime_pages JOIN genres_pages ON anime_pages.id = (".$ft5['id'].") LIMIT 10 ");
您使用的是
$ft5
变量,该变量不存在于您的费时数据条件之外

你还说你需要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);

我尝试这样做:为什么不在问题和示例代码中使用表名?如果我们必须猜测表1是
anime\u类型
还是
genres\u页面
还是
anime\u页面
,那么我们就更难猜到了。如果您在每个表中至少给我们提供最重要的列(列的相关子集是可以的),这也会有所帮助。在
while
循环之外是否有
$ft5
可用?while循环之外没有ft5?也许再看看你的代码。