Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.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 将多个结果放在单个数组中_Php_Mysql_Sql_Arrays_Pdo - Fatal编程技术网

Php 将多个结果放在单个数组中

Php 将多个结果放在单个数组中,php,mysql,sql,arrays,pdo,Php,Mysql,Sql,Arrays,Pdo,我已经用sql编写了代码,因为我只是想了解这个概念。完成后,我会将其更改为sqli/pdo。所以请忽略sql方法,请帮助我解决这个问题 我需要一个基于特定catid的所有vendorname的列表。为此,我有两个表子类别和供应商子类别。我正在尝试链接两个表,首先根据catid获取子类别id(即子类别表中的id),然后根据从上一个表中选择的子类别id(来自VendorSubCat表)显示供应商名称 表视图子类别 id subcatname subcatdesc catname catid

我已经用sql编写了代码,因为我只是想了解这个概念。完成后,我会将其更改为sqli/pdo。所以请忽略sql方法,请帮助我解决这个问题

我需要一个基于特定catid的所有vendorname的列表。为此,我有两个表子类别和供应商子类别。我正在尝试链接两个表,首先根据catid获取子类别id(即子类别表中的id),然后根据从上一个表中选择的子类别id(来自VendorSubCat表)显示供应商名称

表视图子类别

id  subcatname  subcatdesc  catname catid
表视图VendorSubCat

vendorname  vendorid  subcatid  
代码


我希望将所有结果放在一个数组中,即所有列表都应放在一个列表下。不应每次显示新行时都显示“列表”。任何帮助都将不胜感激

您无需立即回复结果:

echo stripslashes(json_encode(array('list' => $posts)));
而是将所有数据收集到一个阵列:

$results = array();
//Your code
$results[] = array('list' => $posts);
//...
$results[] = array('list' => 'No product list');
//...
//And echo just one time in the end:
echo stripslashes(json_encode($results);
或类似于“合并”的内容:

$results = array();
//Your code
$results = $results + $posts;
//...
$results = 'No product list';
//...
//And echo just one time in the end:
echo stripslashes(json_encode(array('list' => $results)));
此外,您还可以在不使用递归查询的情况下执行数据库请求

比如:

SELECT vsc.* FROM VendorSubCat vsc
INNER JOIN subcategory sc ON vsc.id=sc.id
WHERE sc.cat_id = 15

可以在嵌套循环中使用联接而不是查询吗?你熟悉JOIN吗?@RobP我试过了,但遇到了问题,你能告诉我如何实现吗?不确定,
JOIN
将是解决它的正确方法-将是表的自连接-将尽可能多的行转换为列,不是吗?我会调查的。注意:“结果被截断为group_concat_max_len系统变量给定的最大长度,该系统变量的默认值为1024。该值可以设置得更高,尽管返回值的有效最大长度受max_allowed_packet值的约束。”您的代码将被完全破坏,当您需要更新php版本时。为什么仍然使用你的
mysql\ucode>API?我面临着类似的错误,你建议收集一个数组中的所有数据,但是我很难理解它。你能告诉我在你评论过的地方需要写什么代码吗solution@vp_arth很抱歉这么晚才回复,您使用了$results,它是否等同于我使用的任何变量,或者是单独的变量,请您解释一下,
$results
是一个新的临时变量,用于收集
$posts
数据。@vp_arth我还有$posts=array();所以如果我使用$results=array();如果你在循环中清除
posts
,为了抓取一些新的posts,
results
应该在循环之前初始化,并通过
array\u merge
/
+
或一些手动方法从每次迭代中收集posts。您也可以跳过
$posts
并直接向
结果添加新的posts
,然后您可以将其重命名为
posts
:),但如果您希望获得所有迭代的posts,则不应在循环中清除它
$results = array();
//Your code
$results = $results + $posts;
//...
$results = 'No product list';
//...
//And echo just one time in the end:
echo stripslashes(json_encode(array('list' => $results)));
SELECT vsc.* FROM VendorSubCat vsc
INNER JOIN subcategory sc ON vsc.id=sc.id
WHERE sc.cat_id = 15