Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.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 mySQL-在一次选择中使用外部参照表从相关表获取数据_Php_Mysql - Fatal编程技术网

Php mySQL-在一次选择中使用外部参照表从相关表获取数据

Php mySQL-在一次选择中使用外部参照表从相关表获取数据,php,mysql,Php,Mysql,我有两个表,A和B,它们在AB_xref中一起被外部参照。目前,为了从表B中获取数据,我将A中的所有行转储到一个数组中,然后在每个索引上循环查找与该A行相关的多个B行。然后,我将B中的行缝合到A中的行数组中——创建一个嵌套数组 有没有办法使用单个选择和条件来实现这一点?看看这是否能让你接近你想要的位置: 查询: 选择 packages.name作为package_name, activities.name作为activity\u name 从…起 包\活动\外部参照pax packages.id

我有两个表,A和B,它们在AB_xref中一起被外部参照。目前,为了从表B中获取数据,我将A中的所有行转储到一个数组中,然后在每个索引上循环查找与该A行相关的多个B行。然后,我将B中的行缝合到A中的行数组中——创建一个嵌套数组


有没有办法使用单个选择和条件来实现这一点?

看看这是否能让你接近你想要的位置:

查询:

选择
packages.name作为package_name,
activities.name作为activity\u name
从…起
包\活动\外部参照pax
packages.id=pax.package\u id上的内部连接包
activities.id=pax.activity\u id上的内部加入活动
PHP:

$results=get\u assoc\u array\u from\u sql($your\u query);
$outputArray=array();
foreach($results作为$result){
如果(数组\键\存在($result['package\ u name',$outputArray)){
//我们已经有一个数组在这个包,推新的项目
数组推送($outputArray[$result['package\u name']],$result['activity\u name']);
}否则{
//目标阵列尚不存在,请创建它
$outputArray[$result['package\u name']=array($result['activity\u name']);
}
}
基本上,此代码将在整个外部参照表中循环一次(
O(n)
其中
n
是外部参照中的记录数)。对于每个记录,它将查看包名并查看键是否存在于
$outputArray
中。如果没有,则将该键处的值设置为具有当前活动名称的数组。如果它确实存在,请将当前活动附加到该数组

如果在执行后执行
print\r($outputArray)
,您应该会看到一个包含
x
项的数组,其中
x
是不同包的数量。数组中的每个元素将是另一个包含
y
元素的数组,其中
y
是给定包的活动数


注意:您需要自己实现
get\u assoc\u array\u from\u sql
,但我假设您已经使用了一些实现,或者正在使用或类似的实现。

您能给出一个表的示例,以及您想要的输出是什么吗?不必是整个数据集,但一个简单的例子,我相信我们可以找到一些更精确的东西,表“packages”有id,name等。“activities”有id,name等。“package\u activity\u xref”有package\u id,activity\u id。我试图将输出变成一个数组,其中每个包都是一个索引,在该索引中是该包的列信息,然后是与该包相关的每个活动的列信息中的数组。它基本上是向html输出一个包选择器。我有一个使用“while”的版本,它将每个包呈现为一个li,并将其中的活动呈现为li,但这似乎是一种笨拙的处理方式。