将多个结果放在一个数组中
Posted
技术标签:
【中文标题】将多个结果放在一个数组中【英文标题】:place multiple result in a single array 【发布时间】:2015-02-09 11:36:51 【问题描述】:我已经在 sql 中编写了代码,因为我只是想了解这个概念。完成后,我会将其更改为 sqli/pdo。所以请忽略sql方法,请帮助我解决问题
我需要一个基于特定 catid 的所有供应商名称的列表。为此,我有 2 个表子类别和 VendorSubCat。我正在尝试通过首先根据 catid 获取 subcatid(即子类别表中的 id)然后根据从上一个表中选择的 subcatid(来自 VendorSubCat 表)显示供应商名称来链接两个表。
表格视图子类别
id subcatname subcatdesc catname catid
表格视图 VendorSubCat
vendorname vendorid subcatid
代码
<?php
ob_start();
require_once('config.php');
$catid = $_REQUEST['catid'];
$sql1 = "SELECT * FROM subcategory where catid='" . $catid . "'";
$result1 = mysql_query($sql1);
while ($row = mysql_fetch_array($result1))
$myid = $row['id'];
if (sql1 != '0')
$productt = mysql_query("select * from VendorSubCat where id = '" . $myid . "' ");
$posts = array();
if (mysql_num_rows($productt))
while ($post = mysql_fetch_assoc($productt))
$posts[] = $post;
header('Content-type: application/json');
echo stripslashes(json_encode(array('list' => $posts)));
else
header('Content-type: application/json');
echo stripslashes(json_encode(array('list' => 'No productlist')));
?>
虽然代码工作正常,但结果显示在不同的数组中。它显示这样的结果
"list":["id":"1","vendorname":"Marzoogah","vendorid":"1","subcatid":"4"]"list":["id":"2","vendorname":"Zee Zone","vendorid":"2","subcatid":"4"]"list":["id":"3","vendorname":"Zee Zone","vendorid":"2","subcatid":"7"]"list":["id":"4","vendorname":"????? ????????","vendorid":"3","subcatid":"4"]
我希望将所有结果放在一个数组中,即所有列表都应该放在一个列表中。每次显示新行时,不应显示“列表”。任何帮助将不胜感激
【问题讨论】:
您可以在嵌套循环中使用联接而不是查询吗?你熟悉JOIN吗? @RobP 我试过了,但是遇到了麻烦,你能告诉我如何实现它 不确定,JOIN
将是解决它的正确方法 - 将是表的自连接 - 与要转换为列的最大行一样频繁地应用,不会它?我会调查GROUP_CONCAT()。注意:“结果被截断为 group_concat_max_len 系统变量给出的最大长度,其默认值为 1024。该值可以设置得更高,尽管返回值的有效最大长度受值的限制max_allowed_packet。”
当您想要更新您的 php 版本时,您的代码将完全被破坏。为什么还要使用mysql_
API?
【参考方案1】:
您无需立即回显结果:
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
【讨论】:
我遇到了类似的错误,你建议将所有数据收集到一个数组中,但是我很难理解它。你能告诉我你在解决方案中评论的地方需要写什么代码吗 @vp_arth 很抱歉这么晚才回复,您使用了 $results,它是否等同于我使用的任何变量还是单独的变量,请您解释一下$results
是一个新的临时变量,用于收集$posts
数据。
@vp_arth 我也有 $posts = array();所以如果我使用 $results = array();两者不会互相冲突
你在循环中清除posts
,为了获取一些新帖子,results
应该在循环之前初始化,并通过array_merge
/+
或一些手动方法从每次迭代中收集帖子。您也可以跳过$posts
并直接将新帖子添加到results
,然后您可以将其重命名为posts
:) 但如果您想获取所有迭代帖子,则不应在循环中清除它以上是关于将多个结果放在一个数组中的主要内容,如果未能解决你的问题,请参考以下文章
为啥我们可以将 GetComponent<Camera> 的结果放在 Behavior 数组中,但不能执行 GetComponent<Camera>(out behaviorA