【发布时间】: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?