我的问题是:
我将表连接在一起,有些表包含多个数据,我应该提取这些数据,但是我的JSON对象只检索一个。我认为这是因为while循环还会遍历我的主表,获取所有内容并停止循环,考虑到没有其他可循环的内容(我基于数据库中的id
来获取数据,而这些是auto_incremented
等。
所以我的问题是:
如何遍历主表(一次),但继续遍历联接表并将这些值插入其“ own”数组中?
这就是我现在拥有的:
$sqli = "SELECT event.*, typex.id, typex.type
FROM event
JOIN typex ON event.id = typex.id
WHERE event.id = ?";
mysqli_stmt_bind_param($stmt, 's', $editID); //fetch data based on ID
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$resultCheck = mysqli_num_rows($result);
if ($resultCheck > 0) {
$data = array();
while ($row = mysqli_fetch_assoc($result)) {
$data['all'] = array($row);
$data['type'] = array($row['type']);
}
//Echo data as JSON
echo json_encode($data);
给您一个想法:
$data['all']
是将容纳所有$ row的数组(这样我可以轻松地从主表访问列)
$data['type']
但是应该只保存表中的数据:typex(typex是一个联接表)。
一个例子:
您有一个名为stack
的主表和一个已加入的名为typex
的表。
您要考虑到主表在stack
上有一个$data['all']
,并从数组{{1}中插入表auto_increment
中ID为5的所有行。 id
,它会循环一次...但是现在是我失败的部分,需要您的帮助:
在已联接的表unique
中,您有2行ID号为5的行。应提取这两行并将其插入数组typex
中。如何实现?
答案 0 :(得分:2)
$data['all'] = array($row);
$data['type'] = array($row['type']);
这将始终设置最后$row
的结果,如果您需要所有行,则需要这样做:
$data[] = array('all'=>$row,'type'=>$row['type']);
现在$ data的每个项目都是一个带有2个键的数组,all
和type
答案 1 :(得分:0)
一些需要更改的地方:
首先在查询中,由于event
和typex
表都具有id
列,因此您将需要在其中一个上使用别名,以便您可以区分它们,所以我做了以防万一。{p>
typex.event
在这里,我修改了代码以使用OO mysqli,因为它很容易阅读
$sqli = "SELECT event.*, typex.id as typex_id, typex.type as typex_type
FROM event
JOIN typex ON event.id = typex.id
WHERE event.id = ?";